在React中调用this.props.children上的setState或其他方法是一个好习惯吗?

Dan*_*mov 2 javascript reactjs

根据我的理解,道具意味着由父设置,而状态意味着对组件是私有的.

this.state是组件的私有,可以通过调用this.setState()来更改.更新状态后,组件将重新呈现自身.

父组件不应该永远调用setState其子组件.它是否正确?

想象一下,父母<Form>在提交时有一些验证机制,并希望传递所有<FormInput>的验证错误.它应该通过道具来做,还是可以召唤setState孩子?

最后,在子组件上调用任何东西是一种好习惯吗?

考虑这种方法:

validate: function () {
  var hasError = false;

  React.Children.forEach(this.props.children, function(child) {
    if (child.validate) {
      hasError = hasError || child.validate();
    }
  });

  return !hasError;
}
Run Code Online (Sandbox Code Playgroud)

它有效,但我不确定鸭子打字的方法是React的方法.
你怎么看?

Dan*_*mov 5

这不是一个好主意.

使用验证示例,虽然如果您的表单有一些直接的子组件,它会起作用,如果您想验证一个内部的字段<div>怎么办?他们不会是直接的孩子,所以现在你的逻辑限制了你的标记.

实现目标的一种方法是通过给出一个特殊的对象,让孩子完全控制父母所需的状态.React有一个内置的例子:ReactLinkLinkedStateMixin.

您可以采用相同的想法并将其应用于验证.