state 和 props 触发更新的生命周期分别有什么区别?

简介: state 和 props 触发更新的生命周期分别有什么区别?

state 更新流程:

这个过程当中涉及的函数:
1.shouldComponentUpdate: 当组件的 state 或 props 发生改变时,都会首先触发这个生命周期函数。它会接收两个参数:nextProps, nextState——它们分别代表传入的新 props 和新的 state 值。拿到这两个值之后,我们就可以通过一些对比逻辑来决定是否有 re-render(重渲染)的必要了。如果该函数的返回值为 false,则生命周期终止,反之继续;


注意:此方法仅作为
性能优化的方式而存在。不要企图依靠此方法来“阻止”渲染,因为这可能会产生 bug。应该考虑使用内置的 PureComponent 组件,而不是手动编写 shouldComponentUpdate()

2.componentWillUpdate:当组件的 state 或 props 发生改变时,会在渲染之前调用 componentWillUpdate。componentWillUpdate 是 React16 废弃的三个生命周期之一。过去,我们可能希望能在这个阶段去收集一些必要的信息(比如更新前的 DOM 信息等等),现在我们完全可以在 React16 的 getSnapshotBeforeUpdate 中去做这些事;


3.componentDidUpdate:componentDidUpdate() 会在UI更新后会被立即调用。它接收 prevProps(上一次的 props 值)作为入参,也就是说在此处我们仍然可以进行 props 值对比(再次说明 componentWillUpdate 确实鸡肋哈)。

props 更新流程:

相对于 state 更新,props 更新后唯一的区别是增加了对 componentWillReceiveProps 的调用。

关于 componentWillReceiveProps,需要知道这些事情:

componentWillReceiveProps:它在Component接受到新的 props 时被触发。componentWillReceiveProps 会接收一个名为 nextProps 的参数(对应新的 props 值)。该生命周期是 React16 废弃掉的三个生命周期之一。在它被废弃前,可以用它来比较 this.props 和 nextProps 来重新setState。在 React16 中,用一个类似的新生命周期 getDerivedStateFromProps 来代替它。


相关文章
|
6月前
|
JavaScript 数据处理
当数据发生变化时,`watch`函数是如何被触发的?
当数据发生变化时,`watch`函数是如何被触发的?
63 3
|
6月前
|
前端开发
为什么调用setState而不是直接改变state
为什么调用setState而不是直接改变state
50 0
|
1月前
|
前端开发 开发者
为什么调用 setState 而不是直接改变 state
为什么调用 setState 而不是直接改变 state
|
3月前
|
前端开发
React组件实例更改state状态值(四)
【8月更文挑战第14天】React组件实例更改state状态值(四)
36 1
React组件实例更改state状态值(四)
|
4月前
|
前端开发
useEffect问题之为什么使用useEffect来在props改变时重置state是低效的
useEffect问题之为什么使用useEffect来在props改变时重置state是低效的
|
6月前
|
前端开发 JavaScript
设置状态:setState
设置状态:setState
|
6月前
如何监听vuex中的变量参数变化,用watch!
如何监听vuex中的变量参数变化,用watch!
|
JavaScript 前端开发 开发者
vue props传值后watch事件未触发的问题
vue props传值后watch事件未触发的问题
605 0
|
机器学习/深度学习 前端开发 JavaScript
React 内部数据 state v.s. 外部数据 props
React 内部数据 state v.s. 外部数据 props
83 0
|
前端开发
react为什么调用setState而不是直接改变state
react为什么调用setState而不是直接改变state
84 0