componentDidMount()与render()一个级别的,在组件挂载完成之后调用
卸载组件:REACTDOM.unmountComponentAtNode()
componentWillUnmount() 组件马上被卸载的时候
老生命周期:
新的生命周期:
废弃了(加上Unsate_还是能继续用)三个带will的钩子,新增了两个场景罕见的钩子,暂时先不学了,用到的时候再说吧。
getDerivedStateFromProps是React生命周期中的一个静态方法,它在组件收到新的props或state时被调用,然后返回一个新的state,这个state会覆盖现有的state。它的主要目的是处理props的变化,从而更新组件的state。
使用getDerivedStateFromProps可以使React组件在接收到props变化时,根据新的props计算出一个新的state,这样就可以实现在组件接收到props变化时重新渲染组件。需要注意的是,在使用getDerivedStateFromProps时应该避免在返回值中使用this.props或this.state,因为这样会导致副作用。
需要注意的是,虽然getDerivedStateFromProps可以在props变化时更新state,但另一个钩子函数componentDidUpdate也可以实现相同的功能。因此,在使用getDerivedStateFromProps时需要进行权衡和选择,以确保使用适合当前情况的方法。
getSnapshotBeforeUpdate是React组件的生命周期函数之一,它在组件更新之前被调用。它的返回值将作为componentDidUpdate()的第三个参数,用于在更新后获取组件状态或DOM元素的快照。
使用getSnapshotBeforeUpdate可在组件更新后获取更新前的状态或DOM元素快照,并根据这些信息对组件进行优化或处理。例如,在组件更新前获取某个DOM元素的高度,然后在更新后进行一些操作,以确保DOM元素保持不变,从而避免出现闪烁等视觉上的不一致。
需要注意的是,在使用getSnapshotBeforeUpdate时,需要特别留意处理逻辑的实现细节,以确保数据的正确性和组件的稳定性。使用不当可能导致组件出现异常或界面变得不稳定。因此,该方法只应该在必要的情况下使用,以避免增加不必要的复杂性和风险。
React的Diffing算法:也叫虚拟DOM的Diffing算法,是React实现高效更新界面的重要技术之一。
React的Diffing算法的核心是通过对比虚拟DOM树的差异来减少实际DOM操作的次数,从而提升页面渲染的效率。相比传统的DOM操作方式,React先通过JSX语法生成虚拟DOM树,然后对比新旧虚拟DOM树的差异,只更新变化的部分。
React的Diff算法具体实现如下:
1. 首先比较根节点是否相等,如果不相等,则替换整个UI树。
2. 对比同层节点,如果节点类型不一样,则直接替换;如果节点类型相同但是属性不同,则更新属性,这样虚拟DOM树和真实DOM树就一致了。
3. 对比同层节点的子节点,找出差异后只更新需要更新的部分,而其他部分则不作出任何改变。
4. 最后,React会把所有需要更新的节点一次性更新到真实DOM树中,以减少实际DOM操作的次数。
需要注意的是,Diff算法的实现可能会受到数据结构和更新状态等因素的影响。因此,在React应用开发中需要灵活选择最适合场景的更新优化方式,以实现高效的页面渲染。