将道具传递给React-Router 4.0.0儿童路线

时间:2016-12-06 21:58:28

标签: reactjs react-router

我尝试将现有的react-router 3.0.0应用迁移到4.0.0。在路由器中,我需要将其他与路由无关的prop传递给其子节点。

在以前版本的react-router detailed in this post中,有一些不太常见的方法可以实现这一点。我个人最喜欢的是this method使用cloneElement,因为它确保了所有的路由器反应道路也被复制了:

// react-router 3.0.0 index.js JSX
<Router history={browserHistory}
  <Route path="/" component={App}>
    <Route path="/user/:userId" component={User} />
    <IndexRoute component={Home} />
  </Route>
</Routes>

// App component JSX (uses cloneElement to add a prop)
<div className="App">
  { cloneElement(props.children, { appState: value }) }
</div>

到目前为止,我的新App组件如下所示:

// react-router 4.0.0 App component JSX (moved routing code out of index.js and into here)
<BrowserRouter>
  <div className="App">
    <Match exactly pattern="/" component={Home} />
    <Match pattern="/user/:userId" component={User} />
    <Miss component={Home} />
  </div>
</BrowserRouter>

在保留提供的路由器道具的同时,将appState道具添加到每个Match组件的最佳方式是什么?

1 个答案:

答案 0 :(得分:22)

<Route>可以使用render道具而不是component。这允许您内联组件定义。

<Route path='/user/:userId' render={(props) => (
  <User appState={value} {...props} />
)} />