react新旧生命周期

React16.3.0之前生命周期

 

 

16.3开始建议使用新的生命周期

 

新的生命周期增加了static getDerivedStateFromProps()以及getSnapshotBeforeUpdate(),废弃了原有的componentWillMount()componentWillUpdate()以及componentWillReceiveProps(),被废弃的三个函数都是在render之前。

 

为什么废弃?

总的来说因为React17会使用Fiber算法,该算法会通过开始或停⽌渲染的⽅式优化应⽤性能,很可能因为高优先级任务的出现而打断现有任务,导致它们会被执行多次,这也是ajax请求为什么要放在componentDidMount生命周期中而不是componentWillMount中

为什么废弃componentWillReceiveProps

在老版本的 React 中,如果组件自身的某个 state 跟其 props 密切相关的话,需要在 componentWillReceiveProps 中判断前后两个 props 是否相同,如果不同再将新的 props 更新到相应的 state 上去。这样做一来会破坏 state 数据的单一数据源,导致组件状态变得不可预测,另一方面也会导致组件多做1次不必要的渲染

static getDerivedStateFromProps()就是为了为了替代该场景的,但是不到万不得已的情况下还是不要用,遇到上述问题,首先需要考虑使用以下的优化方案,

 

posted @ 2019-10-16 22:09  我是格鲁特  阅读(474)  评论(0编辑  收藏  举报