關於react的一些須知
之前為了學習redux買了一本《深入淺出react和redux》,只看了redux部分。最近重新一遍,還是很有收獲,這裏結合閱讀文檔時的一些理解,記下一些初學者可能不太註意的東西。
原則:
1.react原本的目標是為設計視圖組件,UI=render(data);一個react組件有兩個數據源可以驅動渲染,一個是記錄內部狀態變化的state,一個是外部傳入的props。由於props中的變量可能在外部的某個地方被引用,因而props中的數據是絕對不能修改的。
生命周期:
2.react組件的生命周期有三個過程:Mount、Update、Unmount,每個過程都會觸發鉤子函數:
Mount----
constructor:創建一個組件類的實例,一般用來設置state和綁定成員函數的this;無狀態的組件不需要constructor
getInitialState:調用React.createClass時才調用,調用React.createClass已被官方棄用。
getDefaultProps:調用React.createClass時才調用,調用React.createClass已被官方棄用。
componentWillMount:渲染前觸發(一般不需要)
render:渲染組件
componentDidMount:渲染完成後觸發,比如在這裏執行ajax;只能在瀏覽器中調用
Update----
componentWillReceiveProps:組件傳入的props改變或父組件重新渲染時觸發
shouldComponentUpdate(nextProps,nextState):返回布爾值決定該次更新是否繼續
子該函數中,this.state是setState之前的值。通過this.state,next.state,this.props,next.props對比,決定是否渲染,可以提高組件性能
componentWillUpdate:
render:
componentDidUpdate:可在服務器端或客戶端調用。
Unupdate-----
componentWillUnmount:唯一一個卸載過程觸發的函數,作者提醒,在mount時通過非react方式創建的dom容易造成內存泄漏,需要在這裏手動清除。
數據流:
react中的數據流是自上而下的,父組件可以將props、state、自定義的一些js對象、方法、字符串傳給子組件,作為子組件的props,逐級下傳。
當幾個組件需要共享某個狀態變量的時候,react文檔提到一個概念“lifting state up”:意思是將這個共享的狀態變量放到最近的一個共同父組件中,由這個父組件以props的方式傳給子組件。
//待續
關於react的一些須知