React生命周期詳解


React生命周期圖解

    一、舊版圖解:

    二、新版圖解:

 

 

 

從圖中,我們可以清楚知道React的生命周期分為三個部分:  實例化、存在期和銷毀時。

舊版生命周期如果要開啟async rendering,在render函數之前的所有函數,都有可能被執行多次。

舊版的React生命周期看圖就可以啦,我們就不詳細講解了,下面我們來詳細講下,V16.4React的生命周期。

由圖中可以看到,React生命周期新引入了兩個生命周期函數:getDerivedStateFromProps,    getSnapShotBeforeUpdate。

getDerivedStateFromProps:

getDerivedStateFromProps無論是Mounting還是Updating,也無論是因為什么引起的Updating,全部都會被調用。

getSnapshotBeforeUpdate:

getSnapshotBeforeUpdate()被調用於render之后,可以讀取但無法使用DOM的時候。它使您的組件可以在可能更改之前從DOM捕獲一些信息(例如滾動位置)。此生命周期返回的任何值都將作為參數傳遞給componentDidUpdate()。

 

React官網中getSnapshotBeforeUpdate的例子:

class ScrollingList extends React.Component {
  constructor(props) {
    super(props);
    this.listRef = React.createRef();
  }

  getSnapshotBeforeUpdate(prevProps, prevState) {
    // 我們是否要添加新的 items 到列表
    // 捕捉滾動位置,以便我們可以稍后調整滾動
    if (prevProps.list.length < this.props.list.length) {
      const list = this.listRef.current;
      return list.scrollHeight - list.scrollTop;
    }
    return null;
  }

  componentDidUpdate(prevProps, prevState, snapshot) {
    // 如果我們有snapshot值, 我們已經添加了 新的items
    // 調整滾動以至於這些新的items 不會將舊items推出視圖
    // (這邊的snapshot是 getSnapshotBeforeUpdate方法的返回值)
    if (snapshot !== null) {
      const list = this.listRef.current;
      list.scrollTop = list.scrollHeight - snapshot;
    }
  }

  render() {
    return (
      <div ref={this.listRef}>{/* ...contents... */}</div>
    );
  }
}

 

 這篇文章對React生命周期的講解就到這里啦,可以前往React官網深入學習。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM