代码之家  ›  专栏  ›  技术社区  ›  PatS

React-如何从React中剥离顶级div。组成部分

  •  4
  • PatS  · 技术社区  · 8 年前

    const routesList1 = (
        <Route exact path="/link1" component={Link1UI}/>
        <Route exact path="/link2" component={Link2UI}/>
    )
    

    但这将:

    const routesList1 = (
      <div>
        <Route exact path="/link1" component={Link1UI}/>
        <Route exact path="/link2" component={Link2UI}/>
      </div>
    )
    

    下面是我在React路由器的开关元件中遇到的一个问题的概念性示例。

    import react from 'react';
    import { Route, Switch } from 'react-router-dom';
    
    const routesList1 = (
      <div>
        <Route exact path="/link1" component={Link1UI}/>
        <Route exact path="/link2" component={Link2UI}/>
      </div>
    )
    
    const routesList2 = (
      <div>
        <Route exact path="/link3" component={Link3UI}/>
        <Route exact path="/link4" component={Link4UI}/>
      </div>
    )
    
    function stripDivFrom(reactElement) {
        reactElement.Children.toArray();
    }
    
    class MyApp extends React.Component {
        render() {
            return (
                <Switch>
                    {stripDivFrom(routesList1)}
                    {stripDivFrom(routesList2)}
                    <Route exact path="/help" component={HelpUI}/>
                </Switch>
            );
        }
    }
    

    我提供了这个简化的示例代码,以便读者能够理解我的要求。

    问题是:如何获得给定react/JSX元素的子元素?如何更改stripDivFrom()函数使其工作。

    已更新

    <React.Fragment> 添加了解决此问题的。

        const routesList1 = (
          <React.Fragment>
            <Route exact path="/link1" component={Link1UI}/>
            <Route exact path="/link2" component={Link2UI}/>
          </React.Fragment>
        )
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   Mayank Shukla    8 年前

    它将于 element.props.children .

    function stripDivFrom(reactElement) {
        return reactElement.props.children;
    }
    

    What is props.children in react?

    在同时包含开始标记和结束标记的JSX表达式中,这些标记之间的内容作为特殊的 道具:道具。儿童

    React元素基本上是对象,请检查此示例:

    const element = (
      <h1 className="greeting">
        Hello, world!
      </h1>
    );
    

    const element = {
      type: 'h1',
      props: {
        className: 'greeting',
        children: 'Hello, world'
      }
    };
    

    检查此项: JSX Represents Objects

    工作代码(包装器div上的样式不会反映在ui中):

    const hello = <div style={{color:'red'}}><div>Hello</div><div>World</div></div>
    
    class Game extends React.Component {
    
      a(el){
        return el.props.children;
      }
      
      render() {
        return (
          <div id="game-layout">
            {this.a(hello)}
          </div>
        );
      }
    }
    
    ReactDOM.render(
      <Game/>,
      document.getElementById('container')
    );
    <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 ='container'/>

    https://jsfiddle.net/mayankshukla5031/0cwueg7j/