假设我有2页和几个组件。第一页是登录页面,另一页是主菜单。登录页面仅包含1个组件。用户登录到网站后,我希望react-router导航到主菜单,该主菜单下方即具有导航栏和一些组件。我希望它能够导航到每个组件,并且即使URL已更改,导航栏也始终保持在顶部。
这是我尝试过的代码
// Inside the root component
<BrowserRouter>
<Route path="/menu" component={MenuForm}/>
<Route path="/login" component={LoginForm}/>
</BrowserRouter>
//Inside the menu page component
<Navbar/>
<Route path="/shop" component={Shop}/>
<Route path="/categories" component={Categories}/>
使用此代码,我只能导航至菜单页面和登录页面,而不能导航至作为主菜单的子组件的商店和类别
答案 0 :(得分:1)
您需要有主页
<Route path="/home" component={Home}/> // all your menu and everything here
现在如果您要在家中进入菜单 你可以这样做
<Route path="/home/menu" component={Menu}/>
此组件将在您设置嵌套路线的主页中呈现,因此匹配的路线组件将呈现
<Route path="/home/menu" component={menu}/>
<Route path="/home/profile" component={Profile}/>
答案 1 :(得分:1)
我想您应该考虑创建容器组件。第一个容器将包含您的登录路由,即“身份验证容器”,其他组件应包含在应用程序路由中,即“应用程序容器”。您可以拥有自己的包装器。
const AppRoutes = () => {
return (
<>
<Navigation scrolling={scrolling} />
<Switch>
<ProtectedRoute exact path="/profile" component={UserProfile} />
<ProtectedRoute exact path="/my-orders" component={MyOrders} />
<ProtectedRoute path="/my-saved-result" component={SavedResults} />
</Switch>
</>
)
}
答案 2 :(得分:1)
如果您使用的是react-router v4
,则可以Switch
组件来声明性地定义您的路线,如下所示:
import { Switch, Route, Redirect } from 'react-router-dom';
const MenuForm = () => (
<div className="app-routes">
<NavBar />
<Switch>
<Route exact path="/menu">
<Redirect to="/menu/shop" />
</Route>
<Route path="/menu/shop" component={Shop} />
<Route path="/menu/categories" component={Categories} />
</Switch>
</div>
);
答案 3 :(得分:0)
我正在这样使用
<div className="main-panel">
<Navbar />
<div className="content" style={{ backgroundColor: '#f4f3ef' }}>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/reports" component={ReportMain} />
<Route path="/showWebService" component={ShowWebService} />
</Switch>
</div>
</div>
导航栏链接到导航栏时,导航栏是静态的。
<Link to="/reports">
<p>Reports</p>
</Link>
使用链接调用组件