首先在react項目的src文件夾下創建文件:例:router.view.js和router.config.js
router.config.js---生成並拋出路由配置表
//引入路由試圖組件
import Table from "../component/table";
import About from "../component/about";
import Log from "../component/log";
import Login from "../component/login";
import LoginSucceed from "../component/loginSucceed";
import MySy from "../component/table/mySy";
import TuiJ from "../component/table/tuiJ";
import XinX from "../component/table/xinX";
import My from "../component/table/my";
const routers = [
{ //重定向配置
from:'/',
to:'/table'
},
{
path:'/about',
component:About
},
{
path:'/login',
component:Login
},
{
path:'/loginSucceed',
component:LoginSucceed
},
{
path:'/log',
component:Log
},
{
path:'/table',
component:Table,
children:[ //一級路由配置
{
from:'/',
to:'/table/mySy',
children:[ //二級路由配置
{
from:'/', //一級路由重定向
to:'/table/mySy/ErJiRouter'
},
{
path:'/table/mySy/ErJiRouter',
component:ErJiRouter
}
]
},
{
path:'/table/mySy',
component:MySy
},
{
path:'/table/tuiJ',
component:TuiJ
},
{
path:'/table/xinX',
component:XinX
},
{
path:'/table/my',
component:My
},
]
}
]
export default routers
router.config.js 加載路由視圖組件大函數
import React, { Component } from 'react'
//引入路由內置組件
import { Switch, Route, Redirect } from 'react-router-dom'
export default class Index extends Component {
render() {
const { routers } = this.props //得路由落配置表
const routerList = routers.filter(item => !item.to) //篩選出不是重定向的路由數據
//篩選是重定向數據並生成
const MyRedirect = routers.filter(item => item.from).map((item, key) => <Redirect key={key} from={item.from} to={item.to}></Redirect>)
return (
<Switch>
{
//生成路由對象 路由組件等
routerList && routerList.map((item, key) => <Route path={item.path} key={key}
//路由嵌套,二級路由 , ...props 二級路由可以獲取到props
render={props => <item.component {...props} routers={item.children}></item.component>}
></Route>).concat(MyRedirect) //添加重定向
}
</Switch>
)
}
}
app.js文件下
import React from 'react';
//引入路由配置表
import routers from './router/router.config'
//引入加載路由的組件
//引入加載路由的組件
import MyRouter from './router/router.view'
//引入路由內置組件
//引入路由內置組件
import { BrowserRouter } from 'react-router-dom'
function App() {
return (
<BrowserRouter>
//加載、展示路由試圖組件並傳入路由配置表
<MyRouter routers={routers}></MyRouter>
</BrowserRouter>
);
}
export default App;
在此需要提醒下,如果路由視圖組件寫在app.js文件夾下時,每個頁面都會存在路由組件
注意:
一、二級路由或三級路由需在對應有路由的組件下引入添加:
import MyRouter from '../../router/router.view'
<MyRouter routers={this.props.routers}></MyRouter>
<NavLink to="路由表對應地址">首頁</NavLink>