React生命周期,看这一篇就够辣。

856 阅读2分钟

在使用类组件开发时,我们可以在生命周期方法中执行一些业务逻辑。拿生命周期又有哪些阶段呢?

挂载阶段:当组件实例被创建并插入DOM中时

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

更新阶段:当组件的props或state发生变化时会触发更新

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

卸载阶段:当组件从DOM中移除时

  • componentWillUnmount()

下图清楚地展示了生命周期过程

image.png

React生命周期说明

方法是否必须说明
render()truerender()方法是class组件中唯一必须实现的方法,调用此方法才能把JSX内容渲染到页面上
constructor()falseconstructor(props),可以在构造函数里面初始化state或进行方法绑定
componentDidMount()false会在组件挂载后(插入DOM树中)立即调用,可以在里面发送http请求、设置定时器等操作
componentDidUpdate()falsecomponentDidUpdate(prevProps,prevState,snapshot),会在更新后被立即调用,但是首次渲染不会执行此方法。注意:在此方法里面调用setState,应该避免出现死循环,可以在条件语句里面更新state
componentWillUnmount()false会在组件卸载及销毁之前直接调用,可以在里面清除定时器、取消对象地引用等操作。注意:应避免调用setState()
shouldComponentUpdatefalseshouldComponentUpdate(nextProps,nextState),根据nextProps和nextState这两个参数来判断当前组件是否可以更新
static getDerivedStateFromProps()falsestatic getDerivedStateFromProps(props,state)会在调用render方法之前调用,并在初始挂载及后续更新时都会被调用。它应该返回一个对象来更新state,如果返回null则不更新任何内容
getSnapshotBeforeUpdate()falsegetSnapshotBeforeUpdate(prevProps,prevState),在最近一次渲染输出(提交到DOM节点)之前调用。它使得组件能在发生更改之前从DOM中捕获一些信息(例如,滚动位置)。此生命周期得任何返回值将作为参数传递给componentDidUpdate()
static getDerivedStateFromError()falsestatic getDerivedStateFromError(error),会在后代组件抛出错误后被调用,一般用于错误捕获
componentDidCatch()falsecomponentDidCatch(error,info),会在后代组件抛出错误后被调用,一般用于错误捕获

过期的生命周期方法

方法是否必须说明
UNSAFE_componentWillMount()false该方法在render()之前调用,之前名为componentWillMount。该名称将继续使用至React 17
UNSAFE_componentWillReceiveProps()false父组件重新渲染时候会调用此方法。之前名为componentWillReceiveProps。该名称将继续使用至React 17
UNSAFE_componentWillUpdate()false当组件收到新的props或state时,会在渲染之前调用此方法,之前名为componentWillUpdate。该名称将继续使用至React 17

记录记录!