componentDidMount()
会在组件挂载后(插入 DOM 树中)立即调用。
依赖于 DOM 节点的初始化应该放在这里。
如需通过网络请求获取数据,此处是实例化请求的好地方。
这个方法是比较适合添加订阅的地方。如果添加了订阅,请不要忘记在 componentWillUnmount() 里取消订阅
componentWillUnmount
会在组件卸载及销毁之前直接调用
在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求
或清除在 componentDidMount() 中创建的订阅等。
componentDidUpdate
会在更新后会被立即调用。首次渲染不会执行此方法
componentDidUpdate(prevProps) {
// 典型用法(不要忘记比较 props):
if (this.props.userID !== prevProps.userID) {
this.fetchData(this.props.userID);
}
}
shouldComponentUpdate
作用:
1、避免调停
即使 React 只更新改变了的 DOM 节点,重新渲染仍然花费了一些时间。
在大部分情况下它并不是问题,不过如果它已经慢到让人注意了,你可以通过覆盖生命周期方法 shouldComponentUpdate 来进行提速。
该方法会在重新渲染前被触发。其默认实现总是返回 true,让 React 执行更新:
如果你知道在什么情况下你的组件不需要更新,你可以在 shouldComponentUpdate 中返回 false 来跳过整个渲染过程。
其包括该组件的 render 调用以及之后的操作。
在大部分情况下,你可以继承 React.PureComponent 以代替手写 shouldComponentUpdate()。它用当前与之前 props 和 state 的浅比较覆写了 shouldComponentUpdate() 的实现。
React.PureComponent 与 React.Component 很相似。两者的区别在于 React.Component 并未实现 shouldComponentUpdate(),而 React.PureComponent 中以浅层对比 prop 和 state 的方式来实现了该函数。
注意:如果对象中包含复杂的数据结构,则有可能因为无法检查深层的差别,产生错误的比对结果。
在深层数据结构发生变化时调用 forceUpdate() 来确保组件被正确地更新。你也可以考虑使用 immutable 对象加速嵌套数据的比较。
2、作用
根据shouldComponentUpdate返回值SCU与新旧的state或props比较结果vDOMEQ综合判断是否需要被调停(是否有必要更新真实的 DOM)
zh-hans.reactjs.org/docs/react-…
zh-hans.reactjs.org/docs/optimi…
effect学习: zh-hans.reactjs.org/docs/hooks-…