4

我知道 React 有一个名为 的生命周期方法shouldComponentUpdate,默认情况下返回 true,这就是组件决定更新的方式

但是,当该组件的状态或道具发生变化时,如何调用该生命周期方法。当我们收到新的 props 或 state 时会发生什么?当我们将组件连接到 redux state 和 mapStateToProps 时,我们是否正在检查组件内部值的变化?如果没有,当我们在寻找状态或道具的变化时?

当道具或状态发生变化时,如何调用生命周期方法?当 props 或 state 发生变化时,我们是否有一个监听器来调用这些方法?

4

2 回答 2

18

您应该查看两者的生命周期、它们的执行方式以及调用每个方法的顺序。componentWillMount查看下面的反应生命周期图像,您可以看到andcomponentDidMount和其他人之间的区别componentDidUpdatecomponentWillUpdate等等......

此外,您应该推理何时使用每种方法

要更新您调用的状态this.setState(),它会告诉反应某些东西已经改变,它将重新渲染组件树。如果你使用this.state.data = somethingreact 不会触发 render()。现在要更新 props,您需要了解 render() 的实际工作原理。这个答案已经从现有的anwser中总结出来:

每次调用 render() 时,react 都会创建一个新的虚拟 DOM,其中根节点是调用其渲染函数的组件。当组件或其任何子组件的状态或道具发生变化时,将调用 render() 函数。render() 函数从根开始销毁所有旧的虚拟 DOM 节点,并创建一个全新的虚拟 DOM。

为了确保组件的重新渲染顺畅高效,React 使用 Diffing 算法将创建新树所需的时间减少到 O(n) 的时间复杂度,通常复制树的时间复杂度 > O (n^2)。它实现这一点的方法是在 DOM 中的每个元素上使用“key”属性。React 知道,它可以检查 DOM 中每个节点上的“key”属性,而不是从头开始创建每个元素。这就是为什么如果你没有设置每个元素的“key”属性你会得到一个警告,React 使用这些键来极大地提高它的渲染速度。

反应生命周期

Redux 生命周期

在此处输入图像描述

于 2019-07-11T07:13:50.063 回答
-1

如果您使用redux库,您的组件可能不会在您的道具更改后重新渲染。结帐此问题以解决道具更改问题componentWillReceiveProps

于 2019-07-11T07:15:51.060 回答