React componentDidUpdate:检查是否状态或道具更改导致更新?

时间:2019-04-30 15:12:23

标签: javascript reactjs react-redux memoization

我有一个列表组件,其中有很多条目来自Redux商店的道具。条目将进行转换和过滤,并置于componentDidUpdate中的状态。但是,当组件的内部状态更改时,也会调用此函数。

所以我现在正在检查每个状态更改,如果道具的条目发生了更改。对我来说,这似乎没有必要,因为有时只有一个条目是不同的,整个列表需要与前一个列表进行比较。

如何为道具准备像componentDidUpdate这样的东西?

我考虑过使用getDerivedStateFromProps(),但是它说

  

这种方法适用于状态依赖于道具随时间变化的罕见用例。

这对我的用例不利吗?我只是不认为这是难得的。

然后他们give advice to use memoization解决此类问题。但是,据我所知,记忆化框架仍然必须检查道具的差异。

2 个答案:

答案 0 :(得分:1)

您可以使用shouldComponentUpdate(nextProps, nextState)来比较道具

  

使用shouldComponentUpdate()来让React知道组件的输出是否不受当前状态或道具更改的影响。默认行为是在每次状态更改时重新呈现,并且在大多数情况下,您应该依赖默认行为。

     

应该在呈现新道具或渲染之前调用

shouldComponentUpdate()   状态正在接收。默认为true。此方法未调用   初始渲染或使用forceUpdate()时。

答案 1 :(得分:0)

shouldComponentUpdate()会在安装周期完成后(不在第一次渲染中)调用 componentWillMount()在渲染之前调用。