动态嵌套 React.js 组件

IT技术 reactjs
2021-05-09 04:27:51

我想创建一个可以使用 React.js 呈现灵活/动态JSX 表单格式。此格式必须包含嵌套组。一个组可以包含其他组以及问题。

var Group = React.createClass({
    render: function(){
        return (
            <fieldset></fieldset>
        );
    }
});

var Text = React.createClass({
    render: function() {
        return (
            <label>
               <input type="text"/>
           </label>
        );
     }
});

React.render(
    <form>
        <Group>
           <Text/>
        </Group>
        <Text/>
    </form>,
    document.getElementById('container')
);

我想生产:

<form>
    <fieldset>
        <label>
            <input type="text">
        </label>
    </fieldset>
    <label>
        <input type="text">
    </label>
</form>

但是,该<fieldset>元素未填充。输出只包含一个空的<fieldset>.

我应该如何嵌套 react.js 组件,并仍然保持在根和嵌套级别重用问题和组组件的灵活性?

2个回答

当您将 React 元素嵌套到 JSX 中的其他 React 元素中时,父元素会传递一个children包含子元素prop。请参阅儿童props的类型

另一种看待它的方式<Group><div></div></Group>是 JSX 等价于React.createElement(Group, null, React.createElement('div', null)),而后者又等价于React.createElement(Group, {children: React.createElement('div', null)}).

因此,在您的情况下,您的 Group 组件将如下所示:

var Group = React.createClass({
    render: function(){
        return (
            <fieldset>{this.props.children}</fieldset>
        );
    }
});

请注意,子props是一个不透明的数据结构(它可能是单个元素或元素数组,具体取决于输入),因此如果您需要操作它,您应该使用React.ChildrenAPI。

如果其他人在调试过程中也遇到问题,并且万一最高投票的答案对他们不起作用,文档会说,User defined components must be capitalized.
所以在您的情况下,如果您改为导入fieldset控制器Fieldset,一切都应该正常工作。