reactjs – 将道具传递给React-Router 4.0.0儿童路由

我正在尝试将现有的react-router 3.0.0应用程序迁移到 4.0.0.在路由器中,我需要向其子节点传递一个额外的非路由相关的prop.

在以前版本的react-router,detailed in this post中有一些有点hacky方法可以实现这一点.我个人最喜欢的是使用cloneElement的this method,因为它确保所有的react-routers道具都被复制了:

// 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>

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

<路线>可以采用渲染道具而不是组件.这允许您内联组件定义.
<Route path='/user/:userId' render={(props) => (
  <User appState={value} {...props} />
)} />

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...