React生命周期解析

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.propsnextProps的執(zhí)行狀態(tài),完成對state的修改
  • shouldComponentUpdate(nextProps, nextState):該方法用來攔截新的propsstate,然后判斷是否更新組件
  • 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方法之后調用

demo地址

參考文章推薦:
深入理解react(源碼分析) #1
React源碼分析3 — React生命周期詳解
React 源碼剖析系列 - 生命周期的管理藝術
React生命周期的實現
React.Component
React - 組件的生命周期詳解(及各階段調用的方法)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在React Native中使用組件來封裝界面模塊時,整個界面就是一個大的組件,開發(fā)過程就是不斷優(yōu)化和拆分界面組件...
    ITxiansheng閱讀 947評論 1 2
  • 原教程內容詳見精益 React 學習指南,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,854評論 1 18
  • It's a common pattern in React to wrap a component in an ...
    jplyue閱讀 3,295評論 0 2
  • 組件的生命周期方法分以下三個階段。 Mounting當創(chuàng)建組件的實例并將其插入到DOM中時,將調用這些方法:con...
    _八神光_閱讀 1,104評論 0 0
  • 在做業(yè)務時,我們會碰到一個問題:要不要外包。 外包不外包主要的判斷標準有三條: - 該業(yè)務是不是核心?缺少了它,系...
    吳少杰1988閱讀 142評論 0 0