React生命周期

挂在 

constructor()

static getDerivedStateFromProps()

static getDerivedStateFromProps(props,state)

getDerivedStateFromProps 会在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。它应返回一个对象来更新 state,如果返回 null 则不更新任何内容

此方法适用于罕见的用例,即 state 的值在任何时候都取决于 props。例如,实现 <Transition> 组件可能很方便,该组件会比较当前组件与下一组件,以决定针对哪些组件进行转场动画。

此方法无权访问组件实例。如果你需要,可以通过提取组件 props 的纯函数及 class 之外的状态,在getDerivedStateFromProps()和其他 class 方法之间重用代码。

render()

componentDidMount()

更新

static getDerivedStateFromProps()

getSnapshotBeforeUpdate(prevProps,prevState)

getSnapshotBeforeUpdate() 在最近一次渲染输出(提交到 DOM 节点)之前调用。它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置)。此生命周期的任何返回值将作为参数传递给 componentDidUpdate()。

此用法并不常见,但它可能出现在 UI 处理中,如需要以特殊方式处理滚动位置的聊天线程等。

应返回 snapshot 的值(或 null)。

shouldComponentUpdate()

shouldComponentUpdate(nextProps,nextState)

根据 shouldComponentUpdate() 的返回值,判断 React 组件的输出是否受当前 state 或 props 更改的影响。默认行为是 state 每次发生变化组件都会重新渲染。大部分情况下,你应该遵循默认行为。

当 props 或 state 发生变化时,shouldComponentUpdate() 会在渲染执行之前被调用。返回值默认为 true。首次渲染或使用 forceUpdate() 时不会调用该方法。

此方法仅作为性能优化的方式而存在。不要企图依靠此方法来“阻止”渲染,因为这可能会产生 bug。你应该考虑使用内置的 PureComponent 组件,而不是手动编写 shouldComponentUpdate()。PureComponent 会对 props 和 state 进行浅层比较,并减少了跳过必要更新的可能性。

如果你一定要手动编写此函数,可以将 this.props 与 nextProps 以及 this.state 与nextState 进行比较,并返回 false 以告知 React 可以跳过更新。请注意,返回 false 并不会阻止子组件在 state 更改时重新渲染。

我们不建议在 shouldComponentUpdate() 中进行深层比较或使用 JSON.stringify()。这样非常影响效率,且会损害性能。

render()

getSnapshotBeforeUpdate()

getSnapshotBeforeUpdate() 在最近一次渲染输出(提交到 DOM 节点)之前调用。它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置)。此生命周期的任何返回值将作为参数传递给 componentDidUpdate()。

此用法并不常见,但它可能出现在 UI 处理中,如需要以特殊方式处理滚动位置的聊天线程等。

应返回 snapshot 的值(或 null)。

componentDidUpdate()

componentDidUpdate(prevProps,prevState,snapshot)

componentDidUpdate() 会在更新后会被立即调用。首次渲染不会执行此方法。


卸载

componentWillUnmount()


错误处理

static getDerivedStateFromError()

此生命周期会在后代组件抛出错误后被调用。 它将抛出的错误作为参数,并返回一个值以更新 stat

componentDidCatch()

此生命周期在后代组件抛出错误后被调用。 它接收两个参数:

error —— 抛出的错误。

info —— 带有 componentStack key 的对象,其中包含有关组件引发错误的栈信息

componentDidCatch() 会在“提交”阶段被调用,因此允许执行副作用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现好像有些没有过的生命周期函数,还没完全弄清楚... 一、组件的生命周期 组件的生命周期,主要分为 Mounti...
    越前君阅读 2,108评论 0 4
  • React 生命周期可以分为三部分 一、挂载时 当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下: c...
    ByePast阅读 1,210评论 0 0
  • react 生命周期函数 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁初始化 初始化 get...
    骑着蜗牛逛妓院阅读 331评论 0 1
  • 对于react生命周期的理解,反反复复有很多次不同的理解,我就做个整理,以免每次都进行重新推翻按照官网的解释组件的...
    sherry_碎片阅读 557评论 0 0
  • 某一时刻可以被组件自动调用的函数 挂载 当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下: const...
    RQrry阅读 102评论 0 0