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

ReactJS:如何在呈现组件时传递初始状态?

郑博厚
2023-03-14

我知道我可以在呈现组件时传递道具。我还知道getInitialState方法。但问题是,getInitialState不太有用,因为我的组件不知道它的初始状态。我有。所以我想在渲染的时候传递它。

类似这样的内容(伪代码):

React.render(<Component initialState={...} />);

我该怎么办?

假设我有一个commentlist组件。当我第一次呈现它时,初始状态与数据库中当前注释的快照相对应。当用户包含注释时,该列表将发生更改,这就是为什么它应该是状态而不是道具。现在,为了呈现注释的初始快照,我应该将它传递给commentslist组件,因为它无法知道它。我感到困惑的是,传递这些信息的唯一方法是通过道具,这似乎是一个反模式。

共有1个答案

高宸
2023-03-14

只有永久组件才能使用GetInitialState中的道具。如果同步是您的目标,GetInitialState中的道具是反模式。GetInitialState仅在组件首次创建时调用,因此可能会引发一些bug,因为真理的来源不是唯一的。检查这个答案。

引用文档:

使用从父级传递下来的道具在getInitialState中生成状态通常会导致“真实源”(即真实数据所在的位置)的重复。只要有可能,随时计算值,以确保它们不会在以后不同步而引起维护麻烦

getInitialState: function() {
   return {foo: this.props.foo}
}
<span>{this.props.foo}</span>

在这种情况下,您的初始状态不应该是prop,而应该是填充注释列表的ajax调用。

 类似资料:
  • 问题内容: 我知道我可以在渲染组件时通过。我也知道这种方法。但是问题是,由于我的组件不知道它的初始状态,并没有太大帮助。我做。所以我想在渲染时通过它。 这样的东西(伪代码): 我知道我可以使用a 作为初始状态,但这闻起来像是反模式。 我该怎么办? 编辑清晰度 想象一下我有一个组件。到我第一次渲染它时,初始状态对应于数据库中当前注释的快照。当用户包含评论时,此列表将更改,这就是为什么它应该是a 而不

  • 我有一个数组列表 记录在子组件中,它返回给我初始数组。 从API更改数据后 如果我在函数中将该数组记录在父组件中,我将得到一个对象数组。 它正在更改 ,但子组件没有。 我该怎么办??

  • 问题内容: 我已经在SocketIO的帮助下创建了一个小的ReactJS仪表板,用于实时更新。即使我更新了仪表板,也仍然使我感到不确定我是否正确执行了操作。 最让我感到困扰的是getInitialState中的Props作为反模式发布。我创建了一个仪表板,该仪表板从服务器获取实时更新,除了加载页面外,不需要用户交互。根据我的阅读,应该包含一些内容,这些内容将确定是否应重新渲染该组件,以及....我

  • 我刚开始检查react表单。我遇到了一个问题,react在渲染中标记了我试图填充输入框标签的行。以下是我的应用程序代码: 在这一点上,我所要做的就是用名称输入框的标签为“您的名字”来呈现表单,如果没有输入名称,则让react用名称输入框的标签为“您需要输入您的名字”来重新呈现表单。 非常感谢任何援助。

  • 我在SocketIO的帮助下创建了一个小的ReactJS仪表板,用于实时更新。即使我已经更新了仪表板,但我不太确定我是否做得正确,这让我很困扰。 最让我恼火的是getInitialState中作为反模式POST的道具。我创建了一个从服务器获取实时更新的仪表板,除了加载页面之外,不需要用户交互。根据我所读到的,应该包含决定是否重新呈现组件的内容,而...我还不知道。 但是,当最初调用时,只能传递道具

  • 这是用reactjs呈现原始html的唯一方法吗? 我知道有一些很酷的方法用JSX标记东西,但我主要感兴趣的是能够渲染原始的html(所有的类,内联样式等)。像这样复杂的东西: 我不想在JSX中重写所有这些。 也许我对这一切的想法都错了。请纠正我。