[英]Why are my nested route components not rendering in react-router-dom 6?
[英]Nested Route not working in react router dom for my admin dashboard
我有一個管理儀表板,我成功地實現了它的嵌套路由,但它不呈現頁面。 當我點擊它顯示這個 它更改 URL 但不呈現頁面
我如何解決這個問題,如果有人知道請告訴我
App.js
<Router> <Navbar /> <Routes> <Route exact path="/" element={<Home />} /> <Route exact path="/service" element={<Service />} /> <Route exact path="/contact" element={<Contact />} /> <Route exact path="/login" element={<Login />} /> <Route exact path="/reset" element={<Reset />} /> <Route exact path="/reset/:token" element={<Newpassword />} /> {/* Redirect to their dashboard */} <Route exact path="/employee" element={<Employee />} /> <Route exact path="/publisher" element={<Publisher />} /> {/* admin pages */} <Route path="/admin" element={<Admin />}> <Route path="/admin/project" element={<Project />} /> <Route path="/admin/user" element={<User />} /> </Route> </Routes> </Router>
Admin.js
import React from 'react' import { CDBSidebar, CDBSidebarContent, CDBSidebarHeader, CDBSidebarFooter, CDBSidebarMenu, CDBSidebarMenuItem } from "cdbreact" import { NavLink, Outlet } from 'react-router-dom'; import "./AllStyle.css" const Admin = () => { return ( <div> <div style={{ display: 'flex', height: '100vh', overflow: 'scroll initial' }}> <CDBSidebar textColer="#fff" backgroundColor="rgb(0,7,61)"> <CDBSidebarHeader prefix={<i className="fa fa-bars fa-large"></i>}> <h4>Admin</h4> </CDBSidebarHeader> <CDBSidebarContent className="sidebar-content"> <CDBSidebarMenu> <NavLink to="/admin/user"> <CDBSidebarMenuItem icon="portrait"> ALL USER </CDBSidebarMenuItem> <hr></hr> </NavLink> <NavLink to="/admin/project"> <CDBSidebarMenuItem icon="file-contract"> Add Project </CDBSidebarMenuItem> <hr></hr> </NavLink> <NavLink to="/login"> <CDBSidebarMenuItem icon="sign-out-alt"> Logout </CDBSidebarMenuItem> <hr></hr> </NavLink> </CDBSidebarMenu> </CDBSidebarContent> <hr></hr> <CDBSidebarFooter style={{ textAlign: 'center' }}> <div className="sidebar-btn-wrapper" style={{ padding: '20px 5px' }}> Evalue Content portal </div> </CDBSidebarFooter> </CDBSidebar> </div> <Outlet /> //using Outlet to render the child component </div> ) } export default Admin
我想實現它,如果單擊用戶然后在管理儀表板內呈現用戶組件
更新:
實施<Outlet/>
后,URL 已更改但未顯示子組件的內容但我在控制台中看到錯誤。
Warning: Failed prop type: ForwardRef: prop type `toggled` is invalid; it must be a function, usually from the `prop-types` package, but received `undefined`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.
如果有人知道請告訴我如何解決這個錯字錯誤
更新 2:
使用<Outlet
> 后它起作用了,但一個問題是管理菜單下方顯示的子內容
你能告訴我如何解決這個問題嗎
Admin
組件似乎缺少用於嵌套路由的Outlet
組件,或者路由需要取消嵌套,因為它們使用的是絕對路徑。
Route
組件的嵌套如果使用絕對路徑,只需取消嵌套其他管理路由。
{/* admin pages */}
<Route path="/admin" element={<Admin />} />
<Route path="/admin/project" element={<Project />} />
<Route path="/admin/user" element={<User />} />
Route
組件和一個Outlet
組件來渲染它們如果想要嵌套路由,則Admin
組件必須渲染一個Outlet
組件,以便將嵌套路由渲染到其中。
import React from 'react';
import {
CDBSidebar,
CDBSidebarContent,
CDBSidebarHeader,
CDBSidebarFooter,
CDBSidebarMenu,
CDBSidebarMenuItem
} from "cdbreact";
import { NavLink, Outlet } from 'react-router-dom'; // <-- import Outlet
import "./AllStyle.css";
const Admin = () => {
return (
<>
<div>
<div style={{ display: 'flex', height: '100vh', overflow: 'scroll initial' }}>
<CDBSidebar textColer="#fff" backgroundColor="rgb(0,7,61)">
<CDBSidebarHeader prefix={<i className="fa fa-bars fa-large"></i>}>
<h4>Admin</h4>
</CDBSidebarHeader>
<CDBSidebarContent className="sidebar-content">
.....
</CDBSidebarContent>
<hr></hr>
<CDBSidebarFooter style={{ textAlign: 'center' }}>
.....
</CDBSidebarFooter>
</CDBSidebar>
</div>
</div>
<Outlet /> // <-- render Outlet for nested routes
</>
)
}
export default Admin;
如果使用絕對路由:
{/* admin pages */} <Route path="/admin" element={<Admin />}> <Route path="/admin/project" element={<Project />} /> <Route path="/admin/user" element={<User />} /> </Route>
如果使用相對路由,則省略前導"/"
字符並調整嵌套路徑。
{/* admin pages */} <Route path="/admin" element={<Admin />}> <Route path="project" element={<Project />} /> <Route path="user" element={<User />} /> </Route>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.