【发布时间】:2018-09-02 01:02:34
【问题描述】:
我的路线如下所示:(Main.js)
<BrowserRouter>
<Switch>
<Route name="login" exact path="/login" component={LoginPass} />
<Route name="loginWithTripId" exact path="/login/:tripid" component={LoginPass} />
<PrivateRoute path="/trips/:tripid" component={App} />
</Switch>
</BrowserRouter>
在我的 App 渲染方法中:(App.js)
render() {
const { classes, ...other } = this.props;
return (
<div className={classes.root}>
<Appbar
/>
<LeftDrawer
/>
<Switch>
<Route
path={'/trips/dashboard'}
render={props => (
<Dashboard
{...other}
{...props}
/>
)}
/>
<Route
path={'/trips/:tripid/itinerary'}
render={props => (
<Itinerary
{...other}
{...props}
/>
)}
/>
<Route render={() => <Redirect to={'/trips/dashboard'} />} />
</Switch>
</div>
);
}
如何共享 Dashboard 和 Itinerary 中传递的 router props 而不保存在 App 本地状态中?我尝试在 LeftDrawer 和 Appbar 中使用 withRouter,但它具有其父级(Main.js)的路由器道具。我得到 match.path="/trip/:tripid" 而不是 "trip/:tripid/itinerary" 或 "trip/dashboard"。
对于上下文,我需要根据 URL 在我的 appbar/leftdrawer 组件中呈现某些元素,并且我想使用传递给行程和仪表板组件的 match.path 道具进行匹配。例如,如果我在路线“/trip/dashboard”中,则会加载仪表板。所以appbar需要有一个ADD按钮来添加行程。此按钮不在行程视图的应用栏中。过去,我在仪表板和行程组件中拥有 LeftDraewr 和 Appbar,但我将其提升了一级。
【问题讨论】:
标签: reactjs react-router