如何學慣用Typescript寫Reactjs?
有哪些比較好的教程?
首先掃盲一下,先從搭建環境開始:1.安裝node,因為ts的編譯器是js/ts寫的; 安裝node後同時獲得npm命令,這是nodejs世界裡的包管理器(也可以看作node的app商店);2.安裝vs 2015或者vs code,當然這不是必須的,但是這裡強烈推薦寫ts的工具,vs第一,vsc第二;
3.vs自帶了TypeScript(vs2012+,vs2015update1自帶了ts1.7),最新版本的typescript for vs去官網下載即可, 或者如果不依賴vs(比如mac環境), 可以用命令行裝ts編譯器
npm i -g typescript@next
4. 安裝了ts後, 就會有2個命令可用:tsc和tsd, tsc用來編譯TypeScript代碼, tsd用來下載第三方js類庫的ts定義文件(或者叫頭文件),熟練使用tsd,工作效率提升,因為減少了80%查文檔的時間,所以寫ts可以說是jser打通了任督二脈,上手任何新的開發環境都很快;
有網友指正tsd工具不是安裝ts的時候自帶的,需要另外安裝,裝太久不記得了。npm install tsd -g5. 命令行下載react的ts頭文件,tsd install react-global --save
注意上面之所以寫 react-global 而不是react, 因為我們接下來使用比較原始的寫法,直接把React當作全局對象使用, 而不作為es6模塊(必須用import引入),不需要Babel編譯也不需要webpack打包;
上面執行的tsd命令下載了ReactJS類庫的頭文件, 下面用tsc命令創建一個ts項目配置文件tsc --init
命令創建了tsconfig.json配置文件, 打開該文件
增加"jsx": "react", 就是自動把tsx變成最終的js, 而不是jsx把"outDir": "built", 這行去掉,這樣編譯的文件就會在當前目錄輸出"target": "es5", 這裡es3改成es5,
"watch": true 是否監聽文件修改 如果你用的是vs,這行不重要6.下載reactjs文件,如果沒有安裝bower命令,可以手動去官網下載react類庫bower install --save react
7.以上環境配置好了, 開始寫代碼:
創建一個demo.tsx文件(注意這裡是tsx, 不是ts也不是jsx)創建一個demo.html, 添加文件的引用&
&
&
&
&
&
&
&
&
&
8. demo.tsx 寫代碼
class MyClass extends React.Component& {
render() {
return &hello {this.props.name}&
;
}
}
document.addEventListener("DOMContentLoaded", function () { 9. 如果保存了demo.tsx後, 沒有在目錄下發現自動編譯了demo.js, 那麼可能是vs沒配置好,如果你沒有裝vs或者vsc,沒關係,在當前文件夾下命令行運行
ReactDOM.render(&
});
tsc
tsc命令會自動根據tsconfig.json裡面配置的情況, 自動幫你把代碼編譯成js, 這是編譯後的js文件
10. 打開demo.html可以看到效果了;
11. 至於題主說怎麼學習, 其實跟JS完全沒兩樣, 上面demo.tsx的代碼, 跟react官網的es6寫法一模一樣多了& 這兩個prop和states類型約束, 僅此而已;12. 下班, 有空再寫;------時間分割------13、繼續寫,對1-12進行潤色,轉入傳教模式;妖獸啦,這裡14-15的文字怎麼不不見了,知乎編輯器bug好多。不記得寫了什麼,大概說的是 工廠方法創建子類和用class直接繼承的差異。React.createClass 和 Backbone.View.extend 等都是工廠方法創建子類
文字斷了。。。。
以上的代碼,工廠方法在創建子類的同時,做了一些初始化的動作,這與單純的原型繼承不同,所以在使用class方式進行子類繼承,這樣的寫法是無效的;class MyView extends React.Component {
render() {
return &hello {this.state.name}&
; //會拋異常,因為state是null
}
//不起作用的
getInitialState:(){
return {name:"",age:20};
}
}
需要改成如下方式,下面是官網給出的方案(這裡TypeScript和ES6情況是一樣的)
class MyView extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {
name: "",
};
}
render() {
return &
hello {this.state.name}&
;}
}
16、當組件化遇到強類型:
從前寫JS組件,一般復用性比較差,基本寫完就仍,原因如下:1)暴露了太多的Dom結構以及別的實現細節;2)命名挫,缺乏可記憶性,本身編程中變數和方法的命名對於碼農來說就是天坑;3)JS天生缺乏私有和公共成員的約束,不加註釋根本不知道怎麼使用該類庫/組件;React解決了把dom標籤暴露出去的問題,TS則解決了語言層面的問題,並提供了強大的重構能力,你根本不需要記住組件的API,因為工具會列出來;待續...下面會配上實例。
-----------------時間軸 到2016-01-05-------------------
17、強類型的ts有IDE的代碼提示,但是面對各種mvvm的字元串模版組裝,卻無用武之地,以下是典型的mvvm數據綁定和有IDE支持的JSX數據組裝在開發體驗上的區別;模板字元串的綁定里,工具無法檢查出問題,只能在運行時拋出異常,而jsx則可以提示拼寫錯誤。18、關於生產力再拋一個概念:無障礙編程;
我們平時的開發工作,有不少時間花在查API文檔、調試代碼、查字典(給變數命名),需要不停地切換任務窗口…… 上面的例子比較小,實際開發中各種JSON對象可能有10來個屬性,且結構層層嵌套,不一邊查文檔一邊抓包,根本無法完成開發;如果項目是並行開發的,文檔都還沒定義出來(但是產品原型已經有了,甚至html頁面都已經切好),如何快速完成前端部分的開發工作? 業界常用方法是使用mock數據(先造假數據),下面介紹一種更簡單的辦法(為了舉例先虛擬一個需求場景 —— 一個留言板html的組裝);說一些小細節吧。
- 用@types去安裝react的聲明文件後,可能會發現 ` import React from "react" ` 會報一個沒有默認導出的錯,你需要在tsconfig.json裡面新增一條` "allowSyntheticDefaultImports":true `的配置。tsx解析出錯的話記得` "jsx":"react" `的配置。
- typescript配合react的話,**不需要**proptypes,typescript的類型檢查比他強多了……
- 如果使用redux的話,為state建立一個類型聲明會讓你方便很多,記得盡量減少對象層級嵌套,不僅僅在使用typescript時方便,而且本身也是最佳實踐。
- redux的connect可以當作裝飾器使用。如果不追求pure function的話,類繼承的寫法可能會很漂亮。
- 如果使用webpack,可以考慮用` awesome-typescript-loader `,據說比` ts-loader `好(但是我沒試過)。
終極技巧:如果可以自由選型、又是個稍重的項目,先去試試Angular……(逃
Fula Li 寫得很全了, 我想補充幾點:
- 對於純新手, 考慮到學習曲線, 不建議同時學React和TS. 最好分開學再一起用.
- 現在 (2017-3) 可以不用tsd或typings了. TS開發者把第三方的 .d.ts 包推到了npm. 使用這些類型定義時 npm install @types/xyz 就行.
- 現在的前端開發往往還用webpack等工具做資源打包. 有志於此的建議也了解一下.
---------
以下是廣告:
我自己做了一個TypeScript模板repo, 歡迎使用 https://github.com/jokester/typescript-boilerplate
用TS寫React的請從 webpack-react 分支開始. 其他還有webpack-preact, heroku (express.js) 等分支.
這個repo的定位是適合小項目和新手, 不追求大和全. 所以不像一些大boilerplate會有 webpack + react + redux + hotload + E2E測試等很多東西.
webpack-react分支的內容就只有webpack / react / 單元測試.
如果使用中遇到問題, 提issue或私信問我都可以.
很好的例子
see [翻譯] TypeScript 和 JSX 搞基的事 · Issue #3 · techird/blog · GitHub
本屌裝了Visual Studio 2015 Update 1,何處執行tsd命令呢?新建了一個.tsx文件,裡面寫代碼總是提示React沒定義,這個要怎麼下載.d.ts呢?
只要你配好 systemjs jspm tsd 的工程你就贏了。推薦用 devd 做伺服器。
推薦閱讀:
※為什麼我的 IE Tester 中 IE8 總是崩潰?
※都說前端學習是先平緩後陡峭再平緩,那這幾個轉折點大概對應哪一領域的知識?
※兩道前端的面試題,求各位大神解答一下?
※前端界有哪些越早知道越好的小技巧、小知識?
※在飢人谷學習前端是一種怎樣的體驗?
TAG:前端開發 | 前端入門 | TypeScript | React |