React生命周期主要會經歷這4個階段:創(chuàng)建階段、實例化階段、更新階段、銷毀階段
- 調用
React.createClass
,即創(chuàng)建組件類的時候,會觸發(fā)getDefaultProps
方法,該方法返回一個對象,然后與父組件指定的props
對象合并,最后賦值給this.props
作為該組件的默認屬性,該方法只調用一次
2、實例化階段
-
getInitialState
:初始化state
的值,返回值會賦給this.state
-
componentWillMount
:操作state
,不會觸發(fā)再次渲染,建議用constructor
代替 -
render
:根據 state 的值,生成頁面需要的虛擬 DOM 結構 -
componentDidMount
:可以設置state
,會觸發(fā)再次渲染,組件內部可以通過ReactDOM.findDOMNode(this)
來獲取當前組件的節(jié)點操作DOM
3、更新階段~~用戶操作或者父組件有更新的時候
-
componentWillReceiveProps(nextProps)
:當組件接收到新的props
時會觸發(fā)該函數,通常可以調用this.setState
方法來比較this.props
和nextProps
的執(zhí)行狀態(tài),完成對state
的修改 -
shouldComponentUpdate(nextProps, nextState)
:該方法用來攔截新的props
或state
,然后判斷是否更新組件 -
componentWillUpdate(nextProps, nextState)
:更新之前調用 -
render
:根據diff
算法,生成需要更新的虛擬DOM
數據 -
componentDidUpdate(prevProps, prevState)
:更新之后調用,可以進行DOM 操作
tips:render
中最好只是數據和模板的組合,不應該修改state
如果shouldComponentUpdate
返回false,componentWillUpdate,render,componentDidUpdate
都不會被調用
4、銷毀階段
- 會觸發(fā)
componentWillUnmount
,通常是移除DOM,取消事件綁定,銷毀定時器等工作
props
- 1、
props
是一個對象,是組件用來接收外面?zhèn)鱽淼膮档?/li> - 2、組件內部是不允許修改自己的
props
屬性,只能通過父組件來修改
state
- 它是用來存儲組件自身需要的數據
- 它是可以改變的,它的每次改變都會觸發(fā)組件的
render
方法來更新DOM
結構
遞歸調用~Will方法先調用,Did方法后調用
- 父組件的
componentWillMount / componentWillUpdate
方法一定在子組件的componentWillMount / componentWillUpdate
方法之前調用 - 父組件的
componentDidMount / componentDidUpdate
方法一定在子組件的componentDidMount / componentDidUpdate
方法之后調用
參考文章推薦:
深入理解react(源碼分析) #1
React源碼分析3 — React生命周期詳解
React 源碼剖析系列 - 生命周期的管理藝術
React生命周期的實現
React.Component
React - 組件的生命周期詳解(及各階段調用的方法)