React个人整理
- React基礎
- 自定義新組件
- props和propTypes
- 帶狀態的文本框組件
- 從外部訪問組件(謹慎使用)
- 中途改變屬性
生命周期方法
初始化
設置默認的props,也可以用dufaultProps設置組件的默認屬性. 對于組件類來說只調用一次,該組件類的所有后續應用,getDefaultPops 將不會再被調用
在使用es6的class語法時是沒有這個鉤子函數的,可以直接在constructor中定義this.state。
對于組件的每個實例來說,這個方法的調用有且只有一次,用來初始化每個實例的 state,在這個方法里,可以訪問組件的 this.props。
getInitialState 和 getDefaultPops 的調用是有區別的,getDefaultPops 是對于組件類來說只調用一次,后續該類的應用都不會被調用, 而 getInitialState 是對于每個組件實例來講都會調用,并且只調一次。
組件初始化之后,首次渲染之前調用,以后組件更新不調用,整個生命周期只調用一次,是在render 方法調用之前修改 state 的最后一次機會。
react最重要的步驟,創建虛擬dom,進行diff算法,更新dom樹都在此進行。此時就不能更改state了。 該方法會創建一個虛擬DOM,用來表示組件的輸出。對于一個組件來講,render方法是唯一一個必需的方法。
render方法需要滿足下面幾點:
(1)只能通過 this.props 和 this.state 訪問數據(不能修改)
(2)可以返回 null,false 或者任何React組件
(3)只能出現一個頂級組件,不能返回一組元素
(4)不能改變組件的狀態
(5)不能修改DOM的輸出
render方法返回的結果并不是真正的DOM元素,而是一個虛擬的表現,類似于一個DOM tree的結構的對象。react之所以效率高,就是這個原因。
組件渲染之后調用,只調用一次。 該方法被調用時,已經渲染出真實的 DOM,可以再該方法中通過 this.getDOMNode() 訪問到真實的 DOM(推薦使用 ReactDOM.findDOMNode())。
由于組件并不是真實的 DOM 節點,而是存在于內存之中的一種數據結構,叫做虛擬 DOM (virtual DOM)。只有當它插入文檔以后,才會變成真實的 DOM 。有時需要從組件獲取真實 DOM 的節點,這時就要用到 ref 屬性:
var Area = React.createClass({render: function () {this.getDOMNode(); //render調用時,組件未掛載,這里將報錯return <canvas ref='mainCanvas' >},componentDidMount: function () {var canvas = this.refs.mainCanvas.getDOMNode();//這是有效的,可以訪問到 Canvas 節點} }); 復制代碼需要注意的是,由于 this.refs.[refName]屬性獲取的是真實 DOM ,所以必須等到虛擬 DOM 插入文檔以后,才能使用這個屬性,否則會報錯。
更新
此時組件已經渲染好并且用戶可以與它進行交互,比如鼠標點擊,手指點按,或者其它的一些事件,導致應用狀態的改變,你將會看到下面的方法依次被調用
組件的 props 屬性可以通過父組件來更改,這時,componentWillReceiveProps 將來被調用。可以在這個方法里更新 state,以觸發 render 方法重新渲染組件。
componentWillReceiveProps: function(nextProps) {if (nextProps.checked !== undefined) {this.setState({checked: nextProps.checked})} } 復制代碼react性能優化非常重要的一環。 組件接受新的state或者props時調用,我們可以在此對比前后兩個props和state是否相同。 如果相同,則返回false阻止更新,因為相同的屬性狀態一定會生成相同的dom樹,這樣就不需要創造新的dom樹和舊的dom樹進行diff算法對比,節省大量性能
如果你確定組件的 props 或者state 的改變不需要重新渲染,可以通過在這個方法里通過返回 false 來阻止組件的重新渲染,返回 false 則不會執行 render 以及后面的 componentWillUpdate,componentDidUpdate 方法。
該方法是非必須的,并且大多數情況下不會使用。
這個方法和 componentWillMount 類似,在組件接收到了新的 props 或者 state 即將進行重新渲染前,componentWillUpdate(object nextProps, object nextState) 會被調用。 注意此時可以修改state,但最好不要在此方面里再去更新 props 或者 state。
組件渲染
這個方法和 componentDidMount 類似,在組件重新被渲染之后,componentDidUpdate(object prevProps, object prevState) 會被調用。可以在這里訪問并修改 DOM。
卸載
組件將要卸載時調用,一些事件監聽和定時器需要在此時清除。
// 組件卸載 React.unmountComponentAtNode(this.props.containerNode[0]); 復制代碼總結
- 上一篇: android 微信小程序 本地包,An
- 下一篇: 前端学习(3126):react-hel