我正在将反应路由器添加到现有项目中。
目前,模型被传入根组件,根组件包含一个用于子导航的导航组件和一个主组件。
我发现的反应路由器示例只有一个子组件,在不重复两个子组件的情况下更改多个子组件的最佳方法是什么?
原文由 Tom 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在将反应路由器添加到现有项目中。
目前,模型被传入根组件,根组件包含一个用于子导航的导航组件和一个主组件。
我发现的反应路由器示例只有一个子组件,在不重复两个子组件的情况下更改多个子组件的最佳方法是什么?
原文由 Tom 发布,翻译遵循 CC BY-SA 4.0 许可协议
做到这一点并避免滥用重新渲染的简单干净的方法是(在反应路由器 v5 上测试,需要在反应路由器 v4 上确认):
<Switch>
<Route exact path={["/route1/:id/:token", "/"]}>
<Layout1>
<Route path="/route1/:id/:token" component={SetPassword} />
<Route exact path="/" component={SignIn} />
</Layout1>
</Route>
<Route path={["/route2"]}>
<Layout2>
<Route path="/route2" component={Home} />
</Layout2>
</Route>
</Switch>
可以重构为:
const routes = [
{
layout:Layout1,
subRoutes:[
{
path:"/route1/:id/:token",
component:SetPassword
},
{
exact:true,
path:"/",
component:SignIn
},
]
},
{
layout:Layout2,
subRoutes:[
{
path:"/route2",
component:Home
},
]
}
];
和:
<Switch>
{routes.map((route,i)=>
<Route key={i} exact={route.subRoutes.some(r=>r.exact)} path={route.subRoutes.map(r=>r.path)}>
<route.layout>
{route.subRoutes.map((subRoute,i)=>
<Route key={i} {...subRoute} />
)}
</route.layout>
</Route>
)}
</Switch>
原文由 Sebastien Horin 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果我理解正确,要实现这一点,您将在
Route
中定义多个组件。你可以像这样使用它:另请查看 侧边栏 示例应用程序,应该对您有更多帮助。
编辑: 根据@Luiz 的评论:
所以:
变成:
编辑: 在 react-router v4 中,这可以像这样完成(根据 新文档 中提供的示例):
确保在此处查看新的 React Router v4 文档: https ://reacttraining.com/react-router/