【问题标题】:React componentDidUpdate: check wether state OR props change caused the update?React componentDidUpdate:检查状态或道具更改是否导致更新?
【发布时间】:2019-04-30 15:12:22
【问题描述】:

我有一个列表组件,其中包含许多来自 Redux 商店的道具的条目。这些条目被转换和过滤并放入componentDidUpdate 中的状态。但是,当组件的内部状态发生变化时,也会调用此函数。

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

我怎样才能拥有像 componentDidUpdate 这样的东西来用作道具?

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

此方法适用于状态取决于道具随时间变化的罕见用例。

这不适合我的用例吗?我只是不认为它是罕见的。

然后他们give advice to use memoization解决了这种问题。但是按照我的理解,memoization 框架仍然需要检查 props 是否存在差异。

【问题讨论】:

  • 如果你只是浅层地检查 props 的变化,那么选择 React.PureComponent。 React 会为你处理 props 检查。

标签: javascript reactjs react-redux memoization


【解决方案1】:

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

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

shouldComponentUpdate() 在渲染之前调用新道具或 状态正在接收。默认为真。不调用此方法 用于初始渲染或使用 forceUpdate() 时。

【讨论】:

    【解决方案2】:

    shouldComponentUpdate() 一旦挂载周期完成而不是在第一次渲染中调用 componentWillMount() 在渲染之前调用。

    【讨论】:

      猜你喜欢
      • 2021-02-25
      • 2019-08-30
      • 2021-07-09
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      相关资源
      最近更新 更多