最近在搭建PC项目的React
框架,涉及到React Router,开发同学有时就需要去尝试点新的东西,在开发过程中才不会枯燥的,基于这个理念推动,就在搭建的时候用V6的版本开始了(虽然只是个新版本,也不算啥新东西)…
文章图片
V6的版本相对于V5,做了很多的优化,有书写方面的、路由的嵌套、路由配置化、鉴权方面等等,下面就简单的介绍下如何使用
一、关于书写方面 路由注册的时候由的Switch改为了Routes
//V5版本
import {Route, Switch} from 'react-router-dom';
......
......
//V6版本
import {Route, Routes } from 'react-router-dom';
......
......
不用Route标签包裹子组件,可以直接使用element属性,并且不需要exact来表示精准匹配,V6版本内部算法改变,它默认就是匹配完整路径,先后顺序不再重要,它能够自动找出最优匹配路径
//V5版本
import {Route, Switch} from 'react-router-dom';
//V6的版本
import {Route, Routes } from 'react-router-dom';
将Redirect改为Navigate
//路由配置中
//V5代码如下
import { Redirect } from 'react-router-dom';
//V6如下
import { Navigate } from 'react-router-dom';
} />//组件内部
//V5版本
import { Redirect } from 'react-router-dom';
//重定向到首页
return //V6版本
import { Navigate } from 'react-router-dom';
//重定向到首页
return
用useNavigate替代useHistory使用
import {useNavigate} from 'react-router-dom';
const navigate = useNavigate();
//如去首页
navigate("/home");
//还可使用
navigate(-1);
//后退到前一页
navigate(-2);
//后退到前两页的前一页,
navigate(1);
//前向导航 等等依此类推
二、路由的嵌套方面优化 使用
Outlet
组件,此组件是一个占位符,告诉 React Router 嵌套的内容应该放到哪里。//路由中
}
//User组件中
import {Outlet} from 'react-router-dom';
const User = () => {
return
我是外容器
}
export default User;
三、关于路由的灵活配置化 可以通过API
useRoutes
读取一个路由配置数组,生成相应的路由组件列表,来实现路由配置化,并且可以在路由配置中带 meta属性,增加其他配置化信息,如路由图标,是否需要登录等其他信息
import { useRoutes } from 'react-router-dom';
export const routes = [
{
path: '/',
element: ,
children: [
{
path: 'home',
meta: {
title: '首页',
icon: ,
},
children: [
{
path: 'application',
element: ,
meta: {
title: '应用',
}
}
]
},
{
path: 'setting',
element: ,
meta: {
title: '设置',
icon: ,//图表名称
}
}
]
},
{
path: '/login',
element: ,
meta: {
title: '登录',
noLogin: true,
hideMenu: true
}
},
{
path: '*',
element: ,
meta: {
title: '404',
noLogin: true,
hideMenu: true
}
},
];
const Routes = () => (
useRoutes(routes)
)
export default Routes;
四、关于路由鉴权方面 【react.js|react-router-dom V6的配置使用】此处就不过多的概述,只是做个简单的登录校验的实例,每个项目的关于鉴权方式都不一样,可以结合上方第三点中 meta信息去自行实现,
const onRouteBefore = ({ pathname, meta }) => {
// 动态修改页面title
if (meta.title !== undefined) {
document.title = meta.title
}
// 判断未登录跳转登录页
if (!meta.noLogin) {
if (!isLogin) {
return '/login'
}
}
}
最后 如果你是前端工程师同学,对前端监控搭建感兴趣,欢迎试用体验【webfunny监控系统】。
文章图片
推荐阅读
- #|React组件实例的三大属性
- react|react 路由(react-router-dom 的使用)
- 微信小程序(黑马)|【uniapp小程序】视图容器cover-view
- JS知识总结|【JavaScript复习十八】预解析
- java|含文档+PPT+源码等]精品微信小程序校园第二课堂+后台管理系统|前后分离VUE[包运行成功]计算机毕业设计项目源码Java毕设项目
- 毕业设计|基于Nodejs的心理咨询微信小程序的设计和实现
- JS知识总结|【JavaScript复习十七】作用域以及变量提升
- 资讯|JSON 之父(“让 JavaScript 退休,是对它最好的事情!”)
- React报错之Style prop value must be an object