1. 程式人生 > 其它 >React 生命週期函式總結

React 生命週期函式總結

我們使用 React 來開發專案時候,每個 react 元件都包含生命週期方法,我們可以在這些方法當中執行一些業務邏輯。生命週期方法包含了如下的幾個階段:

掛載:當元件例項被建立並插入 DOM 中時

  • constructor()
  • static getDerivedStateFromProps()
  • render()
  • componentDidMount()

更新:當元件的 props 或 state 發生變化時會觸發更新

  • static getDerivedStateFromProps()
  • shouldComponentUpdate()
  • render()
  • getSnapshotBeforeUpdate()
  • componentDidUpdate()

解除安裝: 當元件從 DOM 中移除時會呼叫

  • componentWillUnmount()

下圖更加清晰地展示了元件在不同階段呼叫的方法:

方法是否必須說明
render() 必須 render() 方法是 class 元件中唯一必須實現的方法,呼叫此方法才能把JSX內容渲染到頁面上
constructor() 非必須 constructor(props),可以在建構函式裡面初始化 state 或進行方法繫結
componentDidMount() 非必須 會在元件掛載後(插入 DOM 樹中)立即呼叫,可以在裡面傳送 http 請求、設定定時器等操作
componentDidUpdate() 非必須 componentDidUpdate(prevProps, prevState, snapshot),會在更新後會被立即呼叫,但是首次渲染不會執行此方法。注意:在此方面裡面呼叫 setState,應該避免出現死迴圈,可以將條件語句裡面更新 state
componentWillUnmount() 非必須 會在元件解除安裝及銷燬之前直接呼叫,可以在裡面清除定時器、取消大的物件的引用等操作。注意:應避免呼叫setState()
shouldComponentUpdate() 非必須 shouldComponentUpdate(nextProps, nextState),根據 nextProps 和 nextState 這兩個引數來判斷當前元件是否可以更新
static getDerivedStateFromProps() 非必須 static getDerivedStateFromProps(props, state),會在呼叫 render 方法之前呼叫,並且在初始掛載及後續更新時都會被呼叫。它應返回一個物件來更新 state,如果返回 null 則不更新任何內容
getSnapshotBeforeUpdate() 非必須

getSnapshotBeforeUpdate(prevProps, prevState)在最近一次渲染輸出(提交到 DOM 節點)之前呼叫。它使得元件能在發生更改之前從 DOM 中捕獲一些資訊(例如,滾動位置)。此生命週期的任何返回值將作為引數傳遞給 componentDidUpdate()

getDerivedStateFromError() 非必須

static getDerivedStateFromError(error),會在後代元件丟擲錯誤後被呼叫,一般用於錯誤捕獲

componentDidCatch() 非必須

componentDidCatch(error, info),會在後代元件丟擲錯誤後被呼叫,一般用於錯誤捕獲

過時的生命週期方法

方法是否必須說明
UNSAFE_componentWillMount() 非必須 改方法在 render() 之前呼叫,之前名為 componentWillMount。該名稱將繼續使用至 React 17
UNSAFE_componentWillReceiveProps() 非必須 父元件重新渲染時候會呼叫此方法,之前名為 componentWillReceiveProps。該名稱將繼續使用至 React 17
UNSAFE_componentWillUpdate() 非必須 當元件收到新的 props 或 state 時,會在渲染之前呼叫此方法,之前名為 componentWillUpdate。該名稱將繼續使用至 React 17