我可以在renderComponent之后立即调用setState吗?

ReactJS - Can I call setState immediately after renderComponent?

本文关键字:调用 setState renderComponent 之后 我可以      更新时间:2023-09-26

我使用React的一些客户端组件。在某些情况下,组件不知道它们的初始状态,所以我需要一种方法来呈现组件并在外部为其提供初始状态。

renderComponent有一个回调方法:

ReactComponent renderComponent(
  ReactComponent component,
  DOMElement container,
  [function callback]
)
显然

:

如果提供了可选回调,它将在组件被渲染或更新

这很好,但是如果我在那个回调中调用setState,在组件重新渲染自己之前,你仍然会看到初始(错误)渲染。

我的问题是,我可以这样做吗:

var myComponent = React.renderComponent(...);
myComponent.setState({...});

…安全吗?我是否可以假设renderComponent至少以同步方式创建了该组件的后备实例,因此那里有可以调用setState的东西?

这种模式似乎在我的临时测试中工作,使用本地主机服务器,但我想知道这是否有点类似于使用JS修改DOM而不等待旧的文档准备信号(即,容易产生不一致的行为)。

另一方面,我可以传入一个默认状态对象作为道具,然后构建组件,以便它检查该道具并在componentWillMount或诸如此类的内容中填充自己的状态。这是否在React方式的范围内?

另一方面,我可以传入一个默认状态对象作为一个道具,然后构建组件,以便它检查该道具并在componentWillMount或诸如此类的东西中填充自己的状态。这是否在React方式的范围内?

是的。状态应该被当作组件的私有实例变量;你永远不应该从组件外部访问它们,但就像把选项传递给对象构造函数一样,在props中指定组件初始状态的某些部分也是有意义的。React的非受控组件(defaultValue)就是这种模式的一个例子。

在可能的情况下,将状态存储在较高的位置并防止其不同步通常会更好,就像React的受控组件一样。你可以让你的组件接受一个onChange回调,然后用它来更新应用的真实源。

另一个注意事项:您通常应该使用getInitialState而不是componentWillMount;使用后者目前是允许的,但将来可能会被弃用。