摘要:為了折騰,簡單的學(xué)習(xí)了下感覺確實不錯。也為了不斷學(xué)習(xí),避免落伍,所以就折騰不斷。既然這么多項目都提前使用了而我又是的粉,那么還是先研究下實現(xiàn)組件。鑒于本人也是學(xué)習(xí),還有太多需要努力的。希望有志同學(xué)一起學(xué)習(xí)探討。
為了折騰, 簡單的學(xué)習(xí)了下TypeScript, 感覺確實不錯。 也為了不斷學(xué)習(xí), 避免落伍, 所以就折騰不斷。
前段時間用ES6,antd+dva寫了一些demo, 發(fā)現(xiàn)antd使用TypeScript實現(xiàn)的,而且angular2也采用了TypeScript。 既然這么多項目都提前使用了TypeScript, 而我又是React的粉, 那么還是先研究下TypeScript實現(xiàn)React組件。
鑒于剛開始, 還是站在別人的肩膀上開始吧。
工具選擇本人對webpack配置略知一二,但暫時還不想太深入到工程方面的研究,所以,工具選擇開源的,有阿里使用的atool-build, roadhog. 嘗試多次, 鑒于之前的項目都是用的roadhog, 而且也看了roadhog git上面已經(jīng)說支持TypeScript, 所以最終選擇了roadhog, 因為它配置確實簡單、省心。
不過要使用roadhog的0.6.0-beta2版本(因為之前的版本不支持TypeScript):
npm install [email protected] --save-dev
配置文件:
//.roadhogrc { "entry": "src/index.js", "publicPath": "/dist/", "outputPath": "./dist", "env": { "development": { "extraBabelPlugins": [ "dva-hmr", "transform-runtime" ] }, "production": { "extraBabelPlugins": [ "transform-runtime", ["import", { "libraryName": "antd", "style": "css" }] // 加入這一條,import antd的樣式的時候才不會被md5 ] } } }項目結(jié)構(gòu)
+------- src +----- components +----- models +----- routes +------- .roadhog +------- node_modules +------- package.json +------- ...
項目結(jié)構(gòu)基本和antd-admin的結(jié)構(gòu)保持一致。
入口文件// index.js import "./index.html" import "babel-polyfill" import dva, { connect } from "dva" import createLoading from "dva-loading" import { browserHistory, Router, Route } from "dva/router" /** * @desc 以下是解決域名下面子目錄部署問題 * 域名項目下面一般會有多個子項目,那么部署的時候,子目錄的作用就至關(guān)重要了。 * 不借助basename不太容易實現(xiàn)。 */ import { useRouterHistory } from "dva/router" import createBrowserHistory from "history/lib/createBrowserHistory" const history = useRouterHistory(createBrowserHistory)({basename: "/mda"}) // 1. Initialize const app = dva({ ...createLoading(), // history: browserHistory, history, onError (error) { console.error("app onError -- ", error) }, }) // 2. Model app.model(require("./models/app")) // 3. Router app.router(require("./router")) // 4. Start app.start("#root")應(yīng)用模塊(src/routes/app.js)
import React from "react" import PropTypes from "prop-types" import { connect } from "dva" import { Icon, Row, Col, Button, Modal, } from "../components" import "antd/dist/antd.css" import styles from "./app.less" function App ({ children, location, dispatch, app, loading }) { const { isVisible, } = app const showModal = () => { dispatch({ type: "app/showModal", }) } const handleOk = () => { } const handleCancel = () => { dispatch({ type: "app/hideModal", }) } return (組件) } App.propTypes = { children: PropTypes.element.isRequired, location: PropTypes.object, dispatch: PropTypes.func, app: PropTypes.object, loading: PropTypes.bool, } export default connect(({ app, loading }) => ({ app, loading: loading.models.app }))(App)This is a row
|
這是一個Col 這是一個Col Hello
組件位于src/components, 開始學(xué)習(xí)的時候,可以直接從ant-design源代碼的components中拷貝代碼過來, 對于簡單的組件Button, Grid, Icon, 可以拷貝過來, 然后直接跑起來, 不過注意安裝必要的包。
基本依賴包{ "@types/react": "^15.0.22", "@types/react-dom": "^0.14.23", "antd": "^2.9.1", "classnames": "^2.2.5", "dva": "^1.2.1", "dva-loading": "^0.2.1", "object-assign": "^4.1.1", "omit.js": "^0.1.0", "prop-types": "^15.5.8", "rc-animate": "^2.3.6", "rc-dialog": "^6.5.8", "rc-util": "^4.0.2", "react": "^15.5.4", "react-dom": "^15.5.4" }總結(jié)
工具、項目搭建起來, 下面可以舒心的學(xué)習(xí)TypeScript開發(fā)React組件了。 鑒于本人也是學(xué)習(xí), 還有太多需要努力的。 希望有志同學(xué)一起學(xué)習(xí)探討。
下面列舉出一些坑:
roadhog貌似和dva關(guān)聯(lián)起來了, 沒有仔細(xì)研究,不做路由配置, 程序跑不起來,姑且先配置下簡單的路由,讓應(yīng)用跑起來吧。
需要安裝@types/react, @types/react-dom, 雖然暫時還不太明白具體原理。
需要在根目錄配置tsconfig.json, 否則跑不起來
typings目錄暫時沒有用到,待學(xué)習(xí)
在遷移modal模塊時, 老是報錯, 最后解決方案在解決modal onClose賦值報錯的問題
以下是相關(guān)命令
開發(fā): npm run server
構(gòu)建: npm run build
源代碼https://github.com/walkerqiao...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82551.html
摘要:詳情怎樣規(guī)避地獄作者先介紹什么是地獄,以及在開發(fā)過程中怎樣去規(guī)避地獄,一時爽性能問題火葬場。詳情其他亮點匯總開發(fā)者大會已于北京時間月日凌晨在美國山景城正式啟幕。 【前端】 1. JavaScript 的新數(shù)據(jù)類型:BigInt BigInt?是 JavaScript 中的一個新的數(shù)字基本(primitive)類型,可以用任意精度表示整數(shù)。使用?BigInt?可以安全地存儲和操作大整數(shù),...
摘要:詳情怎樣規(guī)避地獄作者先介紹什么是地獄,以及在開發(fā)過程中怎樣去規(guī)避地獄,一時爽性能問題火葬場。詳情其他亮點匯總開發(fā)者大會已于北京時間月日凌晨在美國山景城正式啟幕。 【前端】 1. JavaScript 的新數(shù)據(jù)類型:BigInt BigInt?是 JavaScript 中的一個新的數(shù)字基本(primitive)類型,可以用任意精度表示整數(shù)。使用?BigInt?可以安全地存儲和操作大整數(shù),...
摘要:詳情怎樣規(guī)避地獄作者先介紹什么是地獄,以及在開發(fā)過程中怎樣去規(guī)避地獄,一時爽性能問題火葬場。詳情其他亮點匯總開發(fā)者大會已于北京時間月日凌晨在美國山景城正式啟幕。 【前端】 1. JavaScript 的新數(shù)據(jù)類型:BigInt BigInt?是 JavaScript 中的一個新的數(shù)字基本(primitive)類型,可以用任意精度表示整數(shù)。使用?BigInt?可以安全地存儲和操作大整數(shù),...
摘要:詳情怎樣規(guī)避地獄作者先介紹什么是地獄,以及在開發(fā)過程中怎樣去規(guī)避地獄,一時爽性能問題火葬場。詳情其他亮點匯總開發(fā)者大會已于北京時間月日凌晨在美國山景城正式啟幕。 【前端】 1. JavaScript 的新數(shù)據(jù)類型:BigInt BigInt?是 JavaScript 中的一個新的數(shù)字基本(primitive)類型,可以用任意精度表示整數(shù)。使用?BigInt?可以安全地存儲和操作大整數(shù),...
閱讀 1644·2021-09-02 09:55
閱讀 1118·2019-08-30 13:19
閱讀 1405·2019-08-26 13:51
閱讀 1456·2019-08-26 13:49
閱讀 2385·2019-08-26 12:13
閱讀 465·2019-08-26 11:52
閱讀 1913·2019-08-26 10:58
閱讀 3093·2019-08-26 10:19