当前位置: 首页 > Web前端 > HTML5

帮你理清React的生命周期

时间:2023-04-05 01:14:58 HTML5

这是摘自印记中文|react官方文档的总结,也算是帮助自己理清和加强对React生命周期的记忆,让你拥有以后写组件的时候思路更清晰。本文如有错误,敬请指正。整体上,React生命周期分为四个状态阶段:Mount(Assembly)、Update、Uninstall和ErrorCatch。每个状态需要执行几个生命周期函数,这些函数可能在不同的阶段被再次调用。用流程图直观总结如下:挂载(组装)这些方法会在创建组件实例并插入到DOM中时被调用1.constructor()构造器会在组装之前被调用。constructor(props){//...}2.staticgetDerivedStateFromProps()在组件实例化并接受新的属性后调用,返回一个对象更新状态,或者返回null表示不需要更新状态staticgetDerivedStateFromProps(nextProps,prevState)3.componentWillMount()/UNSAFE_componentWillMount()[UNSAFE_]componentWillMount():在组装之前立即调用,发生在版本17之前的render()之前。此生命周期函数的名称可以写为componentWillMount()4.render()必须钩子函数不应该改变组件的状态,不应该与浏览器交互。5.componentDidMount()componentDidMount():组件组装完成后立即调用,当远程网络请求的更新属性或状态改变时触发一次。更新,组件被重新渲染,下面的方法会被调用。1.componentWillReceiveProps()/UNSAFE_componentWillReceiveProps()在挂载的组件接收新属性之前被调用。建议使用getDerivedStateFromProps生命周期代替此函数。UNSAFE_componentWillReceiveProps(nextProps)2.staticgetDerivedStateFromProps()参见Mounting章节中的hook3.shouldComponentUpdate()在挂载的组件属性发生变化,状态发生变化时被调用。通过控制返回的布尔值来告诉React是否重新渲染组件。4.componentWillUpdate()/UNSAFE_componentWillUpdate()当接收到新属性或状态时,在渲染之前立即调用UNSAFE_componentWillUpdate()UNSAFE_componentWillUpdate(nextProps,nextState)请注意,如果shouldComponentUpdate()返回false,将不会调用UNSAFE_componentWillUpdate()。5.render()参见挂载章节中的钩子6.getSnapshotBeforeUpdate()getSnapshotBeforeUpdate()将在最新渲染输出提交到DOM之前立即被调用。它允许您的组件在可能更改之前获取当前值。此生命周期返回的任何值都将作为参数传递给componentDidUpdate()。getSnapshotBeforeUpdate(prevProps,prevState)7.componentDidUpdate()在更新发生后立即被调用。适用于发送请求componentDidUpdate(prevProps,prevState)Unmount1.componentWillUnmount()componentWillUnmount()在组件被卸载和销毁之前立即被调用。任何必要的清理都可以在此方法中处理,例如取消绑定计时器、取消网络请求以及清理在componentDidMount中创建的任何DOM元素。错误处理1.componentDidCatch()错误边界捕获子组件树中任何位置发生的JavaScript错误。错误边界无法捕获其自身的内部错误。componentDidCatch(错误,信息)