React初識整理(一)

 

1、React的特色html

一、自動化的UI狀態管理:自動完成數據變化與界面效果的更新。 react

二、虛擬DOM:建立1個虛擬的dom節點樹,放在內存裏(內存修改數據效率高),數據變化時先修改內存裏的虛擬DOM,而後與頁面的DOM進行對比,React能夠作優化,優化後可只修改變化的部分,縮小節點更改的範圍,從而提升效率。(正常狀況下改變節點後要從新渲染頁面,效率慢)。瀏覽器

三、組件化開發:管理頁面的各功能,將1個功能視爲1個組件。每一個組件均可以有各自的結構、樣式、行爲,而後把全部的組件拼合起來的開發方式。單頁應用的實現方式。babel

四、徹底在js中定義UI:一個組件就是1個js。架構

五、JSX:JavaScript XML。使React的標籤寫法像html那樣來編寫dom

六、只是MVC構架中的V:MVC是一種架構模式,model(模型:獲取數據)→ view(視圖:渲染)→controller(控制器:關聯數據與視圖)。函數

七、單向數據流:只能父級傳子級,便於追蹤數據的來源。組件化

2、建立一個React應用性能

一、引入兩個React的在線js文件:優化

<script crossorigin src="js/react.development.js"></script>
 <script crossorigin src="js/react-dom.development.js"></script>

  

二、使用:

  ①渲染到頁面:ReactDOM.render();

  ②建立元素:React.createElement()

     - 參數1:元素名

     - 參數2:元素屬性,格式爲JSON。多個單詞用駝峯命名,class屬性要寫成className

     - 參數3:標籤內容,能夠是文本,也能夠是另外一個元素對象。

三、JSX語法

   ①引入JSX編譯器 babel.min.js ,而後在script裏寫入type值爲text/babel,讓瀏覽器認爲該代碼爲JSX代碼。可是該方法編譯速度很慢,效率低。

   ②JSX規則與XML一致:

    - 容許嵌套

    - 標籤必須嚴格閉合

    - 屬性:

       - 大部分屬性和HTML標籤一致

       - 兩個特殊:for→htmlFor class→className

       - 能夠自定義屬性

    - 引用變量必須用 {}花括號,花括號中可作運算

    

    - 引用組件用<>尖括號

    - 註釋,{/*註釋*/} ,要加花括號

    - style屬性要寫成花括號形式,如:style={{color:"red"}};

3、React的組件

  一、組件是編寫React應用的基礎,一個應用就是由大大小小的組件組合而成。

  二、組件分類:

     - 無狀態組件:普通函數定義,無狀態,沒有生命週期,可以優化性能。

    

    - 有狀態組件:推薦ES6語法定義,React內部會建立實例,並擁有完整的生命週期。

    

 

  三、組件規範

     - 每一個組件必須有返回值,若是返回值又是一個組件則必須有且僅有一個根元素,即return後面必須有1個標籤,要有返回值的起始。

    

     - 若是返回null/false,編譯時會被替換爲< noscript />

4、數據傳遞的props

  一、每一個函數的參數裏都有props。從父組件能夠經過屬性傳遞數據到子組件。獲得的對應屬性值可用props調用。

  二、數據能夠在組件之間傳遞,不過只能是單向,由父傳子。

  三、經過自定義屬性傳遞

     - 無狀態組件:直接用props傳遞

    

     - 有狀態組件:用this.props傳遞

    

  四、經過文本內容傳遞:

     - 無狀態組件:

    

    - 有狀態組件:

    

 

5、給組件單獨設置樣式

  經過class屬性來設置樣式使得組件的內聚度不夠,能夠經過組件的style來爲每一個組件單獨設置樣式。(如有短線鏈接的要使用駝峯命名)

  

 

6、組件狀態更新(state)

  一、使用ref獲取節點,利用DOM完成節點操做   

  二、使用state對象:

     - 初始化: 在constructor裏初始化

    

    - 使用:直接用this.state進行調用state。

    

     其中onClick={this.addCount}是xml裏的事件處理方式,也能夠直接在花括號裏寫函數,可是當函數體較大時,能夠單獨定義。

  三、函數定義方法:在render前(同級)定義函數。

     - 事件綁定的時候,即僅限事件處理函數,該函數裏的this指向被改變成了undefined,因此改回來.

     - 方法一:在調用函數裏寫onClick={this.addCount.bind(this)},強行將this綁定到以前的this上

     - 方法二:使用箭頭函數 addCount = ()=>{}

    

7、props和state的區別

  一、props:

     - 用於在組件之間傳遞數據。

     - 經過自定義屬性或標籤之間的內容傳遞。

     - 單向傳遞,只能父傳子。

     - 能夠手動設置其值,但不會更新組件狀態。

  二、state:

     - 每一個組件均可以初始化state對象。

     - state不能傳遞,傳遞只能用props

     - 能夠設置值,對應的組件狀態會更新,能夠經過響應式更改UI節點

     - 設置值的方法必須是setState,而不是直接使用this.state。

8、事件處理中的this

  一、在ES6的類中,事件處理方法的this爲undefined。

  二、解決辦法:

     - 在構造函數中將當前對象綁定給方法中的this。

    

    - 使用箭頭函數定義方法。

    

    - 在綁定事件時使用bind方法。

    

    - 在綁定事件時使用箭頭函數。

相關文章
相關標籤/搜索