我正在尝试将路径道具传递给布局组件,该布局组件使用路径道具执行初始API请求,问题是这些路径道具仅传递给子路径。
<BrowserRouter>
<Switch>
<AppLayout> // This AppLayout performs API requests
// with the :route param in the child routes.
<Route path="/some/:route" component={SomeComponent} />
<Route path="/some/other/:route" component={OtherComponent} />
</AppLayout>
</Switch>
</BrowserRouter>
显然,一旦用户点击/some/:route
路线,布局就已经呈现了。我尝试过这样的事情:
<BrowserRouter>
<Route path="/some/:route" render={(props) =>
(<AppLayout {...props}><SomeComponent /></AppLayout>)} />
</BrowserRouter>
这样可以工作,但是每次我使用相同的布局去另一条路线时,AppLayout都会被卸载并重新安装。
使用react-router 3,我可以这样做:
<Router history={browserHistory}>
<Route path="/" component={AppLayout}>
<Route path="/some/:route" component={SomeComponent} />
<Route path="/some/other/:route" component={OtherComponent} />
</Route>
</Router>
路径道具将在AppLayout组件上可用。
有没有办法用react-router 4实现这个目标?
答案 0 :(得分:2)
由于您想要嵌套路线,您应该执行以下操作:
<BrowserRouter>
<Switch>
<Route exact path="/" render={props => <AppLayout {...this.props} />} />
<Route exact path="/some/:route" component={AppLayout} />
<Route exact path="/some/other/:route" component={AppLayout}/>
</Switch>
</BrowserRouter>
注意我是如何将路由器道具传递给AppLayout
并使用AppLayout
组件作为两个路由的处理程序。现在在AppLayout
组件内部,您必须再次使用各自的组件提及这些路由,如下所示:
<Switch>
<Route exact path="/some/:route" render={props => <SomeComponent {...this.props} />} />
<Route exact path="/some/other/:route" render={props => <OtherComponent {...this.props} />} />
</Switch>