📅  最后修改于: 2023-12-03 14:57:25.037000             🧑  作者: Mango
React v16.3 中引入了三个新的生命周期方法,分别是:getDerivedStateFromProps
、componentDidCatch
和 getSnapshotBeforeUpdate
。
getDerivedStateFromProps
是一个静态方法,用于在组件实例化或 props 更新时,根据传入的 props 计算并返回新的 state。它的作用类似于旧的 componentWillUpdate
,但在使用时需要注意一些细节。
在组件实例化时,它会在 constructor
方法之后被调用,然后再调用 render
方法。在组件更新时,会在 render
方法之前被调用。
static getDerivedStateFromProps(props, state) {
// 根据 props 和 state 计算并返回新的 state 对象
}
由于它是一个静态方法,因此不能在方法内部访问组件的实例属性,如 this.props
和 this.state
。需要从方法的参数中获取它们。
componentDidCatch
是一个新增的生命周期方法,它用于捕获渲染期间抛出的异常。如果组件的子组件抛出异常,父组件可以使用该方法来捕获并处理它。
componentDidCatch(error, info) {
// 处理异常信息
}
error
参数是一个 JavaScript Error 对象,包含异常信息。info
参数是一个包含 componentStack 属性的对象,用于获取渲染栈信息。
虽然该方法可以帮助我们捕获异常,但通常不应该在业务逻辑中随意使用。在大部分情况下,我们应该让异常自然抛出并交给错误处理边界(Error Boundaries)来处理。
getSnapshotBeforeUpdate
是一个新增的生命周期方法,它会在组件更新之前,获取触发更新的 props 和 state,并返回一个 snapshot 对象。
getSnapshotBeforeUpdate(prevProps, prevState) {
// 根据 prevProps 和 prevState 计算并返回 snapshot 对象
}
在 getSnapshotBeforeUpdate
被调用之后,会执行 componentDidUpdate
方法。componentDidUpdate
中也可以访问到 snapshot
对象,用于处理更新前后的 DOM 状态差异。
React v16.3 中引入的三个生命周期方法,分别是 getDerivedStateFromProps
、componentDidCatch
和 getSnapshotBeforeUpdate
。它们可以帮助我们更精细地控制组件的生命周期,并提供了更好的错误处理和 DOM 操作能力。但在使用时需要注意细节,避免滥用造成不必要的问题。