【问题标题】:How can I find all nested Components using React/Redux?如何使用 React/Redux 找到所有嵌套组件?
【发布时间】:2016-09-26 08:03:04
【问题描述】:

我希望使用 Redux 验证表单。我正在尝试使用制作一个表单组件,它将遍历子组件并找到各种输入组件(不要与本机 <input> 混淆。

我知道有很多开源解决方案,但我想在开始选择之前了解一些机制。我有一个表单组件设置来测试这样的:

import React from 'react';

export default class Component extends React.Component {
  componentDidMount() {
    this._iterate(this.props.children);
  }

  render(){
    return (
      <form {...this.props}>{this.props.children}</form>
    );
  }

  _iterate(children) {
    React.Children.forEach(children, child => {
      console.log(child);
      if (child.props.children) {
        console.log('get children');
        this._iterate(child.props.children);
      }
    });
  }
};

然后我有另一个具有这样渲染的组件:

render() {
  return (
    <div>
      <Form>
        <ComponentA />
        <ComponentB />
      </Form>
    </div>
  );
}

现在ComponentAComponentB 可能有一个组件可以嵌套更多组件。在这些组件中将是我为 Text、Select 等制作的 React 组件。

上面的代码只是 console.log 组件,以及它们的任何子组件,在这个特定的渲染中。它不会跳入ComponentA children。

有解决办法吗?

【问题讨论】:

    标签: reactjs react-redux


    【解决方案1】:

    这不是您真正想要解决的问题。

    react 的强大之处主要在于它所鼓励的设计模式,而您所做的就是打破这种模式;组件应该只与他们的直系子女交谈并回应他们的直系父母。如果您需要比这更深入,那么中间的组件需要负责传递该数据。

    与其试图深入研究 ComponentA 和 ComponentB 的内部结构,这些组件本身应该具有您需要的可访问性道具。即&lt;ComponentA onChange={whatever} errorMessage={whatever}/&gt; 等,然后将这些道具挂钩到他们的孩子应该发生在 ComponentA 中。

    【讨论】:

    • 这意味着对于每一层嵌套,我必须通过回调。所以如果一个表单在一个级别上,并且输入是 3 个组件,我需要继续传递回调吗?
    • 没错。这是 React 推动使用扩展运算符的一个重要原因。如果您想继续传递多个项目,则可以只传递整个道具,即
    • 是的,我很喜欢那个传播运算符。我会玩那个。但我也在使用 Redux,所以我觉得我可以通过 reducer 和 dispatches 获得胜利。
    • Wellllll.... 随意使用您认为合适的工具,但您应该知道,大多数通量架构(包括 redux)建议仅通过顶部与商店交互-级别“容器”组件,它(你猜对了)将这些值沿链传递给它的曾曾孙。
    • 我完全同意,但是在破坏任何设计模式时要小心谨慎,即使它没有 100% 使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2016-09-12
    • 2016-10-14
    • 2022-11-17
    相关资源
    最近更新 更多