![](/img/trans.png)
[英]React Router v6 : How to render multiple component inside and outside a div with the same path
[英]How to 1). put a div , 2). render a component without Route inside <Routes> with React Router in v6 React?
我想在 <Routes> 中放置一個 div,並在<Routes>
<Routes>
中渲染一個<Topbar />
和<Sidebar />
組件,而不為它們添加<Route>
標簽。
我的代碼如下:-
const App = () => {
return (
<Router>
<Routes>
<Route path="login" element={<Login />} />
<Topbar />
<div className="container">
<Sidebar />
<Route path="/" element={<Home />} />
<Route path="users" element={<UserList />} />
</div>
</Routes>
</Router>
);
};
我想為所有路線實施<Topbar />
和<Sidebar />
。 但對於登錄頁面的例外情況( Topbar
和Sidebar
不應顯示在登錄頁面上)。 這就是為什么我將登錄路由放在Topbar
和Sidebar
的頂部。
控制台顯示錯誤為:
未捕獲的錯誤:[Topbar] 不是
<Route>
組件。<Routes>
的所有子組件必須是<Route>
或<React.Fragment>
如何實現這個功能?
在react-router-dom
v6 中,只有Route
和React.Fragment
組件是Routes
組件的有效子組件。
使用布局組件來渲染Topbar
和Sidebar
組件,以及用於嵌套路由的Outlet
,用於您要渲染這些組件的路由。
例子:
import { Routes, Route, Outlet } from 'react-router-dom';
const Layout = () => (
<>
<Topbar />
<div className="container">
<Sidebar />
<Outlet />
</div>
</>
);
const App = () => {
return (
<Router>
<Routes>
<Route path="/login" element={<Login />} />
<Route element={<Layout />}>
<Route path="/" element={<Home />} />
<Route path="users" element={<UserList />} />
</Route>
</Routes>
</Router>
);
};
像下面這樣改變你的路線,
您需要檢查用戶是否登錄,如果用戶登錄使用 Tobbar、Sidebar 等,否則只返回登錄路由
const App = () => {
const [isLogin, setIsLogin] = useState(false)
return (
<Router>
<Routes>
{ isLogin ? <Topbar />
<div className="container">
<Sidebar />
<Route path="/" element={<Home />} />
<Route path="users" element={<UserList />} />
</div> : <Route path="login" element={<Login />} />
</Routes>
</Router>
);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.