迭代React组件子级

时间:2018-10-23 21:54:51

标签: reactjs children

无论如何,还是在子树中可以找到实际输入(child.type === 'input')的任何入口点?

class MyForm extends React.Component {
  parseChildren(children) {
    React.Children.forEach(children, child => {
      if (child) {
        console.log('type', child.type);
        if (child.props && child.props.children) {
          this.parseChildren.bind(this)(child.props.children);
        }
      }
    });
  }
  componentWillMount() {
    this.parseChildren(this.props.children);
  }
  componentDidMount() {
    this.parseChildren(this.props.children);
  }
  render() {
    return <form>{this.props.children}</form>;
  }
}

class MyInput extends React.Component {
  render() {
    return (
      <p>
        My beautiful input <input {...this.props} />
      </p>
    );
  }
}

ReactDOM.render(
  <MyForm>
    <MyInput type="text" />
  </MyForm>,
  document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

1 个答案:

答案 0 :(得分:0)

您描述的问题不是很清楚。你想实现什么?

在我看来,这不是在MyForm内传递孩子然后只渲染其中一些孩子的最佳方法。

为什么不先将成分(输入)数据作为Form's children传递,然后仅传递那些符合搜索条件的元素,然后进行过滤?或者,也许我理解您错了?