具有母版页/模板的React Router V4路由器

时间:2018-06-28 14:30:23

标签: javascript reactjs react-router

我是一个相对较新的反应者,它试图创建一个具有两种设计的应用。一个是具有公共页眉和页脚的公共站点,以及具有管理页眉和侧边栏的内部应用程序。我创建了一个路由器和2条主要路线“ /”和“ / app”。然后,我添加了子路由,希望如果匹配了父路由器,它将显示父组件并将子路由的组件作为this.props.children传递。我似乎做错了。这是我创建的。

App.js:

...
class App extends Component {
  render() {
    return (
      <Router>
        <Switch>
          <Route component={Public}>
            <Route exact path="/" component={Home}/>
            <Route path="/login" component={Login}/>
          </Route>
          <Route component={Main}>
            <Route path="/dash" component={Dash}/>
            <Route path="/people" component={People}/>
          </Route>
        </Switch>
      </Router>
    );
  }
}
...

公共“模板”:

...
render(){
    return(
      <div>
        I am a public page
        {this.props.children}
      </div>

    )
  }
...

Home.js

...
class Home extends Component{
  render(){
    return(

      <div>I am the home page</div>
    )
  }
}
...

应用“模板”

...
class Main extends Component{
  render(){
    return(
      <div>
        <Header />
        <div>I am an app page</div>
        {this.props.children}
        <Footer/>
      </div>
    )
  }
}
...

Dash.js

...
class Dash extends Component{
  render(){
    return(
      <div>I am the dash page</div>

    )
  }
}
...

谢谢,如果有人可以告诉我或指向我提供好的资源,我将不胜感激!

1 个答案:

答案 0 :(得分:4)

您真的很亲密!实际上,您需要做的是将模板组件作为父项放置在<Route />组件中。子组件是其开始和结束标记之间的组件。继续卡车!

class App extends Component {
   render() {
       return (
          <Router>
           <Switch>
             <Public>
               <Route exact path="/" component={Home}/>
               <Route path="/login" component={Login}/>
             </Public >
             <Main>
               <Route path="/dash" component={Dash}/>
               <Route path="/people" component={People}/>
             </Main>
           </Switch>
         </Router>
       );
     }
   }