1.react.js 、react-dom.js 和 Browser.js ,它們必須首先加載。其中,react.js 是 React 的核心庫,react-dom.js 是提供與 DOM 相關的功能,Browser.js 的作用是將 JSX 語法轉為 JavaScript 語法,這一步很消耗時間,實際上線的時候,應該將它放到服務器完成。
2.ReactDOM.render 是 React 的最基本方法,用于將模板轉為 HTML 語言,并插入指定的 DOM 節(jié)點。
- HTML 語言直接寫在 JavaScript 語言之中,不加任何引號,這就是JSX 的語法,它允許 HTML 與 JavaScript 的混寫
JSX 的基本語法規(guī)則:遇到 HTML 標簽(以 < 開頭),就用 HTML 規(guī)則解析;遇到代碼塊(以 { 開頭),就用 JavaScript 規(guī)則解析。
JSX 的基本語法規(guī)則:遇到 HTML 標簽(以 < 開頭),就用 HTML 規(guī)則解析;遇到代碼塊(以 { 開頭),就用 JavaScript 規(guī)則解析。
4.React 允許將代碼封裝成組件(component),然后像插入普通 HTML 標簽一樣,在網(wǎng)頁中插入這個組件。React.createClass 方法就用于生成一個組件類。
組件類的第一個字母必須大寫,否則會報錯。
組件類只能包含一個頂層標簽,否則也會報錯。
添加組件屬性,有一個地方需要注意,就是 class 屬性需要寫成 className ,for 屬性需要寫成 htmlFor ,這是因為 class 和 for 是 JavaScript 的保留字。
5.this.props 對象的屬性與組件的屬性一一對應,但是有一個例外,就是 this.props.children 屬性。它表示組件的所有子節(jié)點。
this.props.children 的值有三種可能:如果當前組件沒有子節(jié)點,它就是 undefined ;如果有一個子節(jié)點,數(shù)據(jù)類型是 object ;如果有多個子節(jié)點,數(shù)據(jù)類型就是 array 。所以,處理 this.props.children 的時候要小心。
React 提供一個工具方法 React.Children 來處理 this.props.children 。
6.組件的屬性可以接受任意值,字符串、對象、函數(shù)等等都可以。有時,我們需要一種機制,驗證別人使用組件時,提供的參數(shù)是否符合要求。
組件類的PropTypes屬性,就是用來驗證組件實例的屬性是否符合要求。
getDefaultProps 方法可以用來設置組件屬性的默認值。
7.組件并不是真實的 DOM 節(jié)點,而是存在于內(nèi)存之中的一種數(shù)據(jù)結構,叫做虛擬 DOM (virtual DOM)。只有當它插入文檔以后,才會變成真實的 DOM 。根據(jù) React 的設計,所有的 DOM 變動,都先在虛擬 DOM 上發(fā)生,然后再將實際發(fā)生變動的部分,反映在真實 DOM上,這種算法叫做 [DOM diff] ,它可以極大提高網(wǎng)頁的性能表現(xiàn)。
但是,有時需要從組件獲取真實 DOM 的節(jié)點,這時就要用到 ref 屬性。
8.組件免不了要與用戶互動,React 的一大創(chuàng)新,就是將組件看成是一個狀態(tài)機,一開始有一個初始狀態(tài),然后用戶互動,導致狀態(tài)變化,從而觸發(fā)重新渲染 UI。
this.state 屬性讀取。當用戶點擊組件,導致狀態(tài)變化,this.setState 方法就修改狀態(tài)值,每次修改以后,自動調(diào)用 this.render 方法,再次渲染組件。
由于 this.props 和 this.state 都用于描述組件的特性,可能會產(chǎn)生混淆。一個簡單的區(qū)分方法是,this.props 表示那些一旦定義,就不再改變的特性,而 this.state 是會隨著用戶互動而產(chǎn)生變化的特性。
9.用戶在表單填入的內(nèi)容,屬于用戶跟組件的互動,所以不能用 this.props 讀取。
10.組件的生命周期(看那篇細文)
11.組件的數(shù)據(jù)來源,通常是通過 Ajax 請求從服務器獲取,可以使用 componentDidMount 方法設置 Ajax 請求,等到請求成功,再用 this.setState 方法重新渲染 UI 。