react-router-waiter
react-router v6 路由统一管理及路由拦截方案。
- 版本要求:react-router-dom >= 6.2.0
- 支持TS
1、安装
npm i react-router-waiter -S
2、使用
import { HashRouter } from 'react-router-dom'
import RouterWaiter from 'react-router-waiter'
import routes from './routes'
import onRouteBefore from './onRouteBefore'
function App () {
return (
<HashRouter>
<RouterWaiter routes={routes} onRouteBefore={onRouteBefore} />
</HashRouter>
)
}
export default App
3、配置路由
const Index = () => import( '@/views/index/index')
const routes = [
{
path: '/',
redirect: '/index',
},
{
path: '/index',
component: Index,
meta: {
title: '首页',
needLogin: true,
},
},
]
export default routes
- 目前支持配置的字段有 redirect、component、meta,其他字段和react-router-dom的官方支持字段保持一致。(优先级:redirect > component > element。)
- 嵌套路由的使用请看下面的注意事项。
4、配置路由拦截函数
const onRouteBefore = ({ pathname, meta }) => {
if (meta.title !== undefined) {
document.title = meta.title
}
if (meta.needLogin) {
if (!isLogin) {
return '/login'
}
}
}
export default onRouteBefore
5、API
组件 RouterWaiter 的配置属性 API:
routes
,数组类型,路由配置数组(必填)onRouteBefore
,函数类型,路由拦截函数(可选)loading
,组件类型,懒加载路由切换时的 loading 效果组件,默认为一个空div标签(可选)
6、注意事项
- react-router 的嵌套路由父级不支持懒加载方式引用公共组件,需改用官方的element方式。
import PageLayout from '@/components/PageLayout'
{
path: '/',
element: <PageLayout />,
children: [
...
]
},
7、TS类型
export type {
MetaType,
FunctionalImportType,
ReactCompType,
RoutesItemType,
RoutesType,
OnRouteBeforeResType,
OnRouteBeforeType,
RouterWaiterPropsType,
RouterWaiterType,
}