【发布时间】:2014-04-25 10:28:11
【问题描述】:
据我了解,props 是由父级设置的,state 是组件私有的。
this.state 是组件私有的,可以通过调用 this.setState() 来更改。当状态更新时,组件会重新渲染自己。
父组件永远不应该在其子组件上调用setState。这是正确的吗?
假设父 <Form> 在提交时有一些验证机制,并希望通过所有 <FormInput>s 验证错误。 应该通过 props 执行此操作,还是可以对其子级调用 setState?
最后,在子组件上调用 anything 是一种好习惯吗?
考虑这种方法:
validate: function () {
var hasError = false;
React.Children.forEach(this.props.children, function(child) {
if (child.validate) {
hasError = hasError || child.validate();
}
});
return !hasError;
}
它可以工作,但是我不确定鸭子类型的子方法是否适合在 React 中使用。
你怎么看?
【问题讨论】:
-
您应该更新子道具,而不是它们的状态。但我看不出你想在你的代码中如何做到这一点,看起来你正在从你的子组件中收集
valid状态,不是吗? -
@David:这段代码在每个拥有这种方法的孩子上调用
validate()。同样,我认为这不是一个好方法,但我无法解释为什么。 -
好的...但是您的问题是什么?标题与您的代码示例不符。
-
@David:有两个问题密切相关。我编辑了标题并添加了重点。
-
我看不出调用子方法和设置它的状态有什么相似之处,只是
setState也是一个方法。但处理状态与调用自定义方法完全不同。
标签: javascript reactjs