【问题标题】:Nesting Routes in React Router 4 (Tried wrapping routes in component)在 React Router 4 中嵌套路由(尝试在组件中包装路由)
【发布时间】:2018-05-26 10:00:06
【问题描述】:

我正在尝试包装我的路线,以便我可以在每条路线上呈现一些内容,例如标题或任何静态内容。我在这里看过这篇文章: Nested Routes in React Router v4

我尝试像他们那样包装我的路线,但现在唯一显示的是包装组件,没有孩子显示。

所以唯一显示的是//dashboard 路线:

Home Component
Dashboard

代码如下:

包装路线:

    <Home>
      <Switch>
        <Route path="/dashboard" component={Layout} />
        <Route component={NotFound} />
      </Switch>
    </Home>

首页组件:

import React, { Component } from 'react';
import { Link } from 'react-router-dom';

class Home extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div>
        <h2>Home component</h2>
        <Link to="/dashboard">Dashboard</Link>
      </div>
    );
  }
}

export default Home;

布局组件:

import React, { Component } from 'react';


class Layout extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div>
        <h2>Layout Component</h2>
        <h2>Layout Component</h2>
      </div>
    );
  }
}

export default Layout;

【问题讨论】:

    标签: reactjs react-router-dom


    【解决方案1】:

    您是否尝试将 {this.props.children} 放入您的 Home 组件中?

    import React, { Component } from 'react';
    import { Link } from 'react-router-dom';
    
    class Home extends Component {
      constructor(props) {
        super(props);
      }
    
      render() {
        return (
          <div>
            <h2>Home component</h2>
            <Link to="/dashboard">Dashboard</Link>
            {this.props.children}
          </div>
        );
      }
    }
    
    export default Home;
    

    【讨论】:

      【解决方案2】:

      您的布局需要一个组件或指令来知道在哪里呈现子级。

      否则路由器将不知道子路由需要出现在哪里。子组件作为称为 children 的属性传递给布局。您需要将其添加到您希望它出现的位置:

        {props.children}
      

      喜欢:

      import React, { Component } from 'react';
      
      
      class Layout extends Component {
        constructor(props) {
          super(props);
        }
      
        static propTypes = {
          children: PropTypes.node.isRequired,
        }
      
        render() {
          return (
            <div>
              <h2>Layout Component</h2>
              {props.children}
            </div>
          );
        }
      }
      
      export default Layout;
      

      我个人更喜欢使用 . react router config 但是如果你使用裸路由器应该这样做。

      【讨论】:

      • 如果你不介意你能展示如何处理反应路由器配置,我过去曾使用过它,如果我将 Layout 设为功能组件,我是否只需传递道具并调用props.children? export default (props) =&gt; { return ( {props.children} ) }
      • @TaylorAustin 你对你想要的例子有更具体的问题吗,在他们的网站上有点清楚,但如果你需要一个合适的例子,我今晚可以试着做一个。 npmjs.com/package/react-router-config 。不知道你所说的功能组件是什么意思,我想我过去没有这样做过。
      猜你喜欢
      • 1970-01-01
      • 2017-04-24
      • 2020-07-21
      • 1970-01-01
      • 2016-03-06
      • 2017-11-11
      • 1970-01-01
      • 2015-02-21
      相关资源
      最近更新 更多