我正在将React用于某些客户端组件。在某些情况下,组件不知道它们的初始状态,所以我需要一种方法来渲染组件并在外部为它提供初始状态。
renderComponent
有一个回调方法:
ReactComponent renderComponent(
ReactComponent component,
DOMElement container,
[function callback]
)
显然:
如果提供了可选的回调,它将在之后执行 组件被渲染或更新。
这很好,但是如果我在该回调中调用setState
,在组件重新渲染之前,您仍会看到初始(错误)渲染一瞬间。
所以我的问题是,我可以这样做:
var myComponent = React.renderComponent(...);
myComponent.setState({...});
...安全?我可以假设renderComponent
至少以同步的方式创建了组件的后备实例,那么有什么东西可以调用setState
吗?
这种模式似乎在我的临时测试中使用本地主机服务器,但我想知道这是否有点类似于使用JS修改DOM而不等待ol'文档就绪信号(即,倾向于不一致的行为)。
另一方面,我可以将默认状态对象作为prop传递,然后构建组件,以便检查该prop,并在componentWillMount
或其中某种情况下填充自己的状态。这会更多地在The React Way的范围内吗?
答案 0 :(得分:5)
另一方面,我可以将默认状态对象作为prop传递,然后构建组件,以便检查该prop并在componentWillMount中填充自己的状态或者某些东西。这会更多地在The React Way的范围内吗?
是。应将状态视为组件的私有实例变量;你永远不应该从组件外部访问它们,但正如将选项传递给对象构造函数一样,在props中指定组件初始状态的某些部分是有意义的。 React的不受控制的组件(defaultValue
)就是这种模式的一个例子。
如果可能的话,通常可以更好地保持状态存储得更高并防止它失去同步,就像React的受控组件一样。您可以通过让您的组件进行onChange回调来执行此操作,然后使用该回调来更新应用程序的真实来源。
另一个注意事项:您通常应使用getInitialState
代替componentWillMount
;目前允许使用后者,但将来可能会弃用。