【问题标题】:React component hook for only when props update (and not state)仅当道具更新(而不是状态)时才反应组件挂钩
【发布时间】:2018-10-28 02:26:36
【问题描述】:

当且仅当我的组件的道具发生变化时,我想启动一些行为。过去我使用过componentWillReceiveProps,但使用current documentation,这似乎已被弃用。文档似乎表明componentDidUpdate 是新建议,但是这会在任何更新(包括状态更改)时触发。还提到了getDerivedStateFromProps,但这必须是静态方法。

我可以编写一些代码来运行所有prevPropsthis.props,但这似乎是重复的。

【问题讨论】:

  • 为什么状态变化时不更新?这是“反应”的主要功能之一。它对状态变化做出“反应”。那么停止设置状态?
  • 我最终需要改变状态,但我需要在接收道具和更新状态之前执行其他组件实例逻辑。由于这个逻辑是特定于实例的,我不认为静态 getDerivedStateFromProps 可以处理它。对其中一个答案的评论中有更多详细信息。
  • 我认为您需要提供您实际尝试过的代码并告诉您期望发生什么。也许使用 console.log 告诉我们什么时候应该发生。否则没有人可以帮助你,而且问题质量也不好。

标签: reactjs react-component


【解决方案1】:

在没有看到代码的情况下,我认为正确的方法是使用getDerivedStateFromProps 在道具发生更改时更新状态,然后让状态更改触发您想要的行为。
我想不出避免使用 state 来更新组件的理由,这基本上是 react 的本质。

【讨论】:

  • 我要调用的行为是 React 组件上的另一个实例方法。 getDerivedStateFromProps 是一个静态方法,只能更新状态变量。例如,这是一个通过this.loadInformation() 方法从API 加载自己的数据的组件。它是从组件内部触发的,比如在安装之后,或者在组件内部或组件下方触发某些事件处理程序时。但是我也想支持父组件进行更改,并且需要传递一个新的道具来触发该组件上的新信息加载。
  • 我明白了。难道你不能改变子组件的状态,然后在componentDidUpdate 方法中加载数据吗?
  • 我不太清楚这是什么意思。我想处理一个由父组件触发更改的情况,它可以通信的唯一方法是更改​​它传递下来的道具。
  • 我的意思是:向下传递一个道具(比如说一个布尔值shouldLoad)>> 在getDerivedStateFromProps 内的子组件中改变状态(再说一次,比如说shouldLoad)如果 state 的 shouldLoad 与 props 不同 >> 检查 this.shouldLoad 是否在 componentDidUpdate 方法中为 true,如果是,请调用 this.loadInformation() 并更改 `shouldLoa
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 2020-02-25
  • 2018-01-13
  • 2021-10-15
  • 2018-07-10
  • 1970-01-01
相关资源
最近更新 更多