react-router-config (嵌套路由)使用
第一步安装 react-router-config (需要注意不支持 react-router-dom 5以上的版本 )
yarn add react-router-config
第二步在 react-app-env.d.ts 中声明引入
/// <reference types="react-scripts" /> declare module 'react-router-config'; declare module 'react-router-dom';
第三步 创建 router 文件
import SystemFrame from '@/components/SystemFrame';
import Home from '@/pages/Home';
import Login from '@/pages/Login';
const routes: any = [
{
path: '/login',
component: Login,
routes: []
},
{
path: '/',
component: SystemFrame,
// exact: true,
routes: [
{
path: '/home',
component: Home,
routes: []
}
]
}
]
export default routes
SystemFrame 组件
import { renderRoutes } from "react-router-config";
import React from "react";
import HeaderComps from "@/components/Header"
import MenuComps from "@/components/Menu"
import { SystemFrameWrapper } from './styled'
const SystemFrame: React.FC = (props: any) => {
return (
<SystemFrameWrapper className="system-frame-wrapper">
<div className="system-frame-main">
<div className="system-frame-main-left">
<MenuComps></MenuComps>
</div>
<div className="system-frame-main-right">
<HeaderComps></HeaderComps>
{ renderRoutes(props.route.routes) }
</div>
</div>
</SystemFrameWrapper>
)
}
export default SystemFrame
需注意在使用嵌套路由的时候,当 父级路由的 path 为 "/" 的时候,不能开启 exact 模式,而且该路由必须放在最后面,否则会导致匹配不上路由,从而导致页面空白;而且当一个组件作为父级路由使用时,必须再次执行 renderRoutes 方法,如 SystemFrame 组件
第四步在 App.tsx 中引入使用
import { BrowserRouter } from 'react-router-dom';
import { renderRoutes } from "react-router-config";
import routes from "./router";
function App() {
return (
<BrowserRouter>
{ renderRoutes(routes) }
</BrowserRouter>
);
}
export default App;
第五步在 index.tsx 中展示 App 组件
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; // 性能检测工具 import reportWebVitals from './reportWebVitals'; ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, document.getElementById('root') ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals();
完成以上步骤就能在浏览器上自由切换了
浙公网安备 33010602011771号