我正在尝试将现有的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>
<路线>可以采用渲染道具而不是组件.这允许您内联组件定义.
原文链接:https://www.f2er.com/react/301281.html<Route path='/user/:userId' render={(props) => ( <User appState={value} {...props} /> )} />