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

Mat*_* Mc 1 javascript facebook reactjs

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

renderComponent 有一个回调方法:

ReactComponent renderComponent(
  ReactComponent component,
  DOMElement container,
  [function callback]
)
Run Code Online (Sandbox Code Playgroud)

显然:

如果提供了可选回调,则将在呈现或更新组件后执行该回调.

这很好,但如果我调用setState该回调,在组件重新渲染自身之前,您仍会看到初始(错误)渲染一瞬间.

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

var myComponent = React.renderComponent(...);
myComponent.setState({...});
Run Code Online (Sandbox Code Playgroud)

...安全?我可以假设renderComponent至少已经以同步的方式创建了组件的支持实例,那么有什么东西可以调用setState吗?

这个模式似乎在我的临时测试中使用localhost服务器,但我想知道这是否有点类似于使用JS修改DOM而不等待ol'文档就绪信号(即,容易出现不一致的行为) .

另一方面,我可以将默认状态对象作为prop传递,然后构建组件,以便检查该prop并在其中填充自己的状态componentWillMount或某些.这会更多地在The React Way的范围内吗?

Sop*_*ert 5

另一方面,我可以将默认状态对象作为prop传递,然后构建组件,以便检查该prop,并在componentWillMount或其中填充自己的状态.这会更多地在The React Way的范围内吗?

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

在可能的情况下,保持状态存储更高并防止它不同步通常更好,就像React的受控组件一样.您可以通过使组件采用onChange回调来执行此操作,然后使用该回调来更新应用程序的真实来源.

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