React 組件生命周期

在組件的整個生命周期中,隨著該組件的props或者state發生改變,其DOM表現也會有相應的變化。一個組件就是一個狀態機,對于特定地輸入,它總返回一致的輸出。組件的生命周期可分成三個狀態:實例化、存在期和銷毀時。

<h5>實例化</h5>
首次實例化,當組件在客戶端被實例化,第一次被創建時,以下方法依次被調用:

  getInitialState
  componentWillMount
  render
  componentDidMount```

實例化完成后的更新,當組件在服務端被實例化,首次被創建時,以下方法依次被調用:
``` getInitialState
  componentWillMount
  render
  componentDidMount```
```注:componentDidMount 不會在服務端被渲染的過程中調用```
<h5>存在期 </h5>
組件已存在時的狀態改變
``` componentWillReceiveProps
  shouldComponentUpdate
  componentWillUpdate
  render
  componentDidUpdate```
<h5>銷毀&清理期 </h5>
```componentWillUnmount```

1.getDefaultProps

作用于組件類,只調用一次,返回對象用于設置默認的props,對于引用值,會在實例中共享。

2.getInitialState

作用于組件的實例,在實例創建時調用一次,用于初始化每個實例的state,此時可以訪問this.props。

3.componentWillMount

在完成首次渲染之前調用,此時仍可以修改組件的state。

4.render

必選的方法,創建虛擬DOM,該方法具有特殊的規則:

只能通過this.props和this.state訪問數據
可以返回null、false或任何React組件
只能出現一個頂級組件(不能返回數組)
不能改變組件的狀態
不能修改DOM的輸出

5.componentDidMount

真實的DOM被渲染出來后調用,在該方法中可通過this.getDOMNode()訪問到真實的DOM元素。此時已可以使用其他類庫來操作這個DOM。

注:在服務端中,該方法不會被調用。

6.componentWillReceiveProps

組件接收到新的props時調用,并將其作為參數nextProps使用,此時可以更改組件props及state。

  componentWillReceiveProps: function(nextProps) {
      if (nextProps.bool) {
          this.setState({
              bool: true
          });
      }
  }
7.shouldComponentUpdate

組件是否應當渲染新的props或state,返回false表示跳過后續的生命周期方法,通常不需要使用以避免出現bug。在出現應用的瓶頸時,可通過該方法進行適當的優化。

注:在首次渲染期間或者調用了forceUpdate方法后,該方法不會被調用

8.componentWillUpdate

接收到新的props或者state后,進行渲染之前調用,此時不允許更新props或state。

9.componentDidUpdate

完成渲染新的props或者state后調用,此時可以訪問到新的DOM元素。

10.componentWillUnmount

組件被移除之前被調用,可以用于做一些清理工作,在componentDidMount方法中添加的所有任務都需要在該方法中撤銷,比如創建的定時器或添加的事件監聽器。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 實例化首次實例化getDefaultPropsgetInitialStatecomponentWillMountr...
    以德扶人閱讀 510評論 0 51
  • 實例化 存在期 銷毀&清理期 說明 生命周期共提供了10個不同的API。1.getDefaultProps作用于組...
    一像素閱讀 149評論 0 0
  • 實例化 一個實例初次創建 getDefaultProps 只會被調用一次 getInitalState 每個實例調...
    wmtcore閱讀 503評論 0 0
  • 下圖詳細列述了 React 組件在整個生命周期中所涉及的方法和行為: 生命周期詳解 組件在整個 ReactJS 的...
    楊慧莉閱讀 735評論 0 0
  • 目標完成1/10啦! 6:00起,今天把碳水化物換到早晨,吃的很飽,但代價是做飯耗費精力,吃飽以后給胃部增加壓力導...
    28歲的櫻桃丸子想要變身閱讀 296評論 3 2