当前位置: 首页 > 知识库问答 >
问题:

当给出新的道具值时,如何强制子组件重写?

国兴文
2023-03-14

我试过这种模式。

ParentComponent
...
render(
return <ChildComponent newProps="newPropsValue />)

ChildComponent
...
ComponentWillReceiveProps{
this.setState({"propsKey": "newPropsValue"})
}

据我所知,最初的组件呈现是由props更改触发的,而由于setState是异步的(出于某种原因),带有新状态更新的呈现不是在第一次传递时完成的。

然而,我不明白的是,为什么当它最终决定更新状态时,它没有重新发布组件。我以为由setState引起的状态变化总是会触发一个rerender。

所以最后,我有一个组件,它在状态实际改变之前无用地重新呈现,然后什么都不做,当/如果(?)状态更新。我一点也不理解这种行为。

共有1个答案

宁弘亮
2023-03-14

SetState将触发ComponentUdpate->ComponentWillUpdate->Renderprops更改将在此链之前触发ComponentWillReceiveProps。您可以在这里看一下关于React生命周期的图像。您可以看到reactpropsstate上的不同行为。

所以:

然而,我不明白的是,为什么当它最终决定更新状态时,它没有重新呈现组件。

通过setstate更新state将触发render函数(重新呈现)。而且道具也会触发呈现

遵循您的代码

  • ComponentWillReceiveProps:
    • this.props.newprops=“newpropsvalue”
    • this.state.propskey=“newpropsvalue”

    现在,让我们在parentcomponent中更新childcomponentprops,假设newprops=“latestpropsvalue”:

      ComponentWillReceiveProps之前的
    • :
      • this.props.newprops=“latestpropsvalue”
      • this.state.propskey=“AnotherValue”
      • this.props.newprops=“latestpropsvalue”
      • this.state.propskey=“latestpropsvalue”

      当给出新的道具值时,如何强制子组件重写?

      如果您的render正在使用state,则在render内部使用setstate。如果您在render中使用props,它也会相应地更新

 类似资料:
  • 我试图将表示组件与容器组件分开。我有一个和一个。容器负责触发redux操作,以基于当前用户获取适当的站点。 问题在于,在容器组件最初呈现之后,当前用户是异步获取的。这意味着容器组件不知道需要在其函数中重新执行代码,该函数将更新数据以发送到。我想当容器组件的一个道具(用户)发生变化时,我需要重新渲染它。如何正确地执行此操作?

  • 我有一个使用自定义元素的表单。在组件中,我管理输入的状态(有效/无效)。在表单中,我要求用户重新输入密码,我希望如果用户输入两个正确的密码,然后修改第一个,第二个无效(得到一个红色的背景色)。 我还试图通过添加以下属性更显式地传递值:,但也不起作用。 那么,这种方法有什么问题,什么是强制重新评估第二个密码组件的好方法呢?

  • 我正在呈现一个自定义模态组件,该组件基于从父组件传入的道具来显示。道具最初为,然后通过按钮在父组件中更新。我正在通过render函数中的语句检查组件状态。当组件首次初始化时,它会像预期的那样记录,但当isVisible更新时,它会返回。为什么状态不随道具更新? 我知道这可能是非常基本的组件生命周期的东西,但我无法从文档中找到它,而且我是一个相当新的反应者。

  • 问题内容: 一个人如何将没有价值的道具传递给反应成分? 注意-没有为这些道具指定默认道具值。 我似乎找不到关于它的任何引用,但是通过观察这些属性的值(它们在默认情况下会分配给它们)。 问题答案: 编译器将您传递的内容解释为布尔值属性。编写纯HTML时也是如此。没有值的属性被解释为布尔值。由于JSX是用于编写HTML的语法糖,因此具有相同的行为是有道理的。 官方的React文档包含以下内容: 布尔属

  • 我是新手,基本上我正在尝试立即更新父组件的状态及其子组件(和)道具。当前仅更新父组件的状态。我会一步一步地解释清楚。 这里我有一个父组件 这个组件有两个对象数组(和),分别作为道具发送到和组件。接收selectedPlayer和setSseltedPlayer。两个组件都有一个组件和一个选择输入。在组件中,用户将选择一个团队,他们将显示所选团队的球员,而在组件中,将选择一个球员,他们将显示选中的玩

  • 我试图传递一个道具给一个子组件在反应,但它不显示在所有的道具,当我控制台日志。甚至关键的也不显示。对此的任何帮助都将不胜感激。