React 16之后有三个周期函数被弃用:ComponentWillMount,ComponentWillRecieveProps,ComponentWillUpdate;
React 16.8+ 的生命周期分为三个阶段:挂载阶段,更新阶段,卸载阶段,每个阶段会调用相应的生命周期函数,如:
挂载阶段:1.constructor:构造函数,最先被执行;2. getDerivedStateFromProps:static getDerivedStateFromProps(nextProps,next State),这是个静态方法,当我们收到新的属性想去更改state时可以使用;3. render函数;4. componentDidMount:组件装载之后调用;
更新阶段:1. getDerivedStateFromProps: 此方法在更新个挂载阶段都可能调用;2.shouldComponentUpdate: shouldComponentUpdate(nextProps,nextState),有两个参数nextProps和nextState,表示新的属性和变化之后的state,返回一个布尔值,true表示会触发重新渲染,false表示不会触发重新渲染,默认返回true,我们通常利用此生命周期来优化React程序性能; 3. render: 更新阶段也会触发此生命周期;4. getSnapshotBeforeUpdate:getSnapshotBeforeUpdate(prevProps, prevState),这个方法在render之后,componentDidUpdate之前调用;5. componentDidUpdate:componentDidUpdate(prevProps, prevState, snapshot)
,该方法在getSnapshotBeforeUpdate方法之后被调用,有三个参数prevProps,prevState,snapshot,表示之前的props,之前的state,和snapshot。第三个参数是getSnapshotBeforeUpdate返回的,如果触发某些回调函数时需要用到 DOM 元素的状态,则将对比或计算的过程迁移至 getSnapshotBeforeUpdate,然后在 componentDidUpdate 中统一触发回调或更新状态。
卸载阶段:1. componentWillUnmount: 当我们的组件被卸载或者销毁了就会调用,我们可以在这个函数里去清除一些定时器,取消网络请求,清理无效的DOM元素等垃圾清理工作