Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在react中呈现多个不同类型的子级_Javascript_Reactjs - Fatal编程技术网

Javascript 在react中呈现多个不同类型的子级

Javascript 在react中呈现多个不同类型的子级,javascript,reactjs,Javascript,Reactjs,在react中,您可以执行以下操作: var Wrap = React.createClass({ render: function() { return <div>{ this.props.children }</div>; } }); var App = React.createClass({ render: function() { return <Wrap><h1>Hello wor

在react中,您可以执行以下操作:

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

var App = React.createClass({
    render: function() {
        return <Wrap><h1>Hello word</h1></Wrap>;
    }
});
var Wrap=React.createClass({
render:function(){
返回{this.props.children};
}
});
var App=React.createClass({
render:function(){
回复问候语;
}
});
这允许您将一个组件传递给另一个组件。但如果Wrap有另一个div,您可以将内容放入其中呢。因此,考虑以下内容:

var Wrap = React.createClass({
    render: function() {
        return (
          <div>
            <ul className="icons">
             // Another compoent should be passed here from App to render icons.
            </ul>
            { this.props.children }
          </div>
        );
    }
});

var App = React.createClass({
    render: function() {
        return <Wrap><h1>Hello word</h1></Wrap>;
    }
});
var Wrap=React.createClass({
render:function(){
返回(
    //另一个组件应该从应用程序传递到渲染图标。
{this.props.children} ); } }); var App=React.createClass({ render:function(){ 回复问候语; } });
在上面的示例中,您可以看到,我不仅希望传入
App
组件的子组件,而且还希望传入另一个组件,即
ul
部分的图标。这可能吗

如果是,怎么做?

我看到两种选择:

  • 将其他组件作为道具传递,例如

    <Wrap icons={<Icons />}><h1>...</h1></Wrap>
    

  • 使用高阶组件来实现这一点比通过索引或循环访问子级更干净

    const wrap = (Icons) => class extends React.Component {
        render() {
            return (
              <div>
                <ul className="icons">
                    <Icons {...this.props.iconProps} />
                </ul>
                { this.props.children }
              </div>
            );
        }
    });
    
    class AppIcons extends React.Component {
        render: function() {
            return <div />
        }
    });
    
    class App extends React.Component {
        render: function() {
            return <Wrap iconProps={this.props}><h1>Hello word</h1></Wrap>;
        }
    });
    
    const Wrap = wrap(AppIcons);
    
    
    ReactDOM.render(App, domContainerNode)
    
    const wrap=(Icons)=>类扩展React.Component{
    render(){
    返回(
    
    {this.props.children} ); } }); 类AppIcons扩展了React.Component{ render:function(){ 返回 } }); 类应用程序扩展了React.Component{ render:function(){ 回复问候语; } }); 常量换行=换行(应用图标); render(应用程序,域容器节点)
    如何将组件作为属性传递?如果我做了
    var Icons=React.createClass({})
    是否会像您那样
    如果我处理两个孩子,如何设置第二个孩子?第一个是
    this.props.children
    ,但第二个是?您可以像其他任何组件一样创建组件,例如
    this.props.children
    实际上是单个组件或组件数组。有一个helper函数总是返回一个数组,但我现在记不起来了。如果您传递了两个子项,则可以使用
    this.props.children[0]
    访问第一个子项,使用
    this.props.children[1]
    访问第二个子项。这两个组件不是不同吗
    ,返回
    ,以及
    {this.props.children}
    中的任何内容。然后在
    App
    中,您可以实例化两个不同的组件,而不是一个。我认为,如果你将组件作为道具传递,你会继续感觉自己在战斗。
    const wrap = (Icons) => class extends React.Component {
        render() {
            return (
              <div>
                <ul className="icons">
                    <Icons {...this.props.iconProps} />
                </ul>
                { this.props.children }
              </div>
            );
        }
    });
    
    class AppIcons extends React.Component {
        render: function() {
            return <div />
        }
    });
    
    class App extends React.Component {
        render: function() {
            return <Wrap iconProps={this.props}><h1>Hello word</h1></Wrap>;
        }
    });
    
    const Wrap = wrap(AppIcons);
    
    
    ReactDOM.render(App, domContainerNode)