🚀🚀首发:CSDN碰磕,学无止境
💧💧💧小雨
??You can`t have a better tomorrow if you don-t stop thinking about yesterday.
📅2022/6/18
React中的路由
在React快速入门的文章中其实已经讲过了,但写的不是特别细,这里再发表一篇详细了解 路由6版本中新增的新特性
路由V6特性
<Switch>重命名为<Routes>
component/render被element替代
默认显示路由添加index属性,默认为true
Redirect 组件取消 变为 Navigate
使用useNavigate替代了useHistory
v6移出了WithRouter,添加了一些新的hooks
使用`useRoutes`替代了v5的`react-router-config`
新API:Outlet
安装引入
这里路由讲解的是v6以上版本的,所以安装时注意版本
npm i react-router-dom
import {BrowserRouter,Route, Routes} from 'react-router-dom';
一级路由与多级路由
语法:
path是跳转路径,element是展示的组件内容(6版本以上)
<BrowserRouter>
<Routes>
<Route path='/路径1' element={组件标签}></Route>
<Route path='/路径2' element={组件标签}></Route>
</Routes>
</BrowserRouter>
重定向
exact精确匹配
<Redirect from="/" to="/center" exact />
6版本以上需要引入Navigate实现重定向
import {BrowserRouter,Route, Routes,Navigate} from 'react-router-dom';
<Route path="/" element={<Navigate to ="/center" />}/>
配置404页面拦截
通过*表示只要上方路径都不对,则进入NotFound组件页面
<Route path='*' element={<NotFound/>} />
嵌套路由
Route套Route
<BrowserRouter>
<Routes>
<Route path='/center' element={<Center></Center>}>
<Route path='child' element={<Child />}></Route>
</Route>
</Routes>
</BrowserRouter>
导航
声明式导航
使用关键字:NavLink,该关键词能得到点击时的标签,并且默认添加class=“active”
注:这里导航需要放到BrowserRouter中,所以这里我通过插槽实现部署到路由BrowserRouter中…
<MRouter>
<Tabbar></Tabbar>
</MRouter>
<BrowserRouter>
{this.props.children}
<Routes>
<Route path='/films' element={<Films></Films>}></Route>
<Route path='/cinemas' element={<Cinemas></Cinemas>}></Route>
<Route path='/center' element={<Center></Center>}>
<Route path='child' element={<Child />}></Route>
</Route>
{}
<Route path='/' element={<Navigate to ="/center" />} />
<Route path='*' element={<NotFound/>} />
</Routes>
</BrowserRouter>
import React from 'react';
import { Link,NavLink } from 'react-router-dom';
import '../css/Tabbar.css'
function Tabbar(){
return (
<div>
<ul>
{}
<li><NavLink to='/films'>影片</NavLink></li>
<li><NavLink to='/cinemas'>电影院</NavLink></li>
<li><NavLink to='/center'>我的中心</NavLink></li>
</ul>
</div>
);
}
export default Tabbar
编程式导航
- 原生js(window.location.href)
- 老版本(this,props.history.push)
- v6版本以上(使用useNavigate)
import React from 'react';
import {useNavigate} from 'react-router-dom';
function Films(){
const navigate = useNavigate()
return (
<div>
Films
<b onClick={goto404=>{
navigate("/404")
}}>去404页(编程式导航)</b>
</div>
);
}
export default Films
路由传参
方式1(路径传参)
navigate(`/home/message/detail/${id}/${title}`)
获取数据:函数组件会接收到props 参数在params中
props.match.params.参数名
方式2(state传参)
navigate(`/home/message/detail`,{state:{name:'碰磕',age:111},replace:true})
参数在query中
props.match.query.参数名
路由拦截
常用于部分页面需要部分权限访问时进行判断拦截
写法
<Route path='/cinemas' element={<RequireAuth>
<Cinemas />
</RequireAuth>}></Route>
RequireAuth为拦截的函数 Cinemas时需要拦截的组件
function RequireAuth({ children }) {
const authed = "true"
return authed === 'true' ? (
children
) : (
<Navigate to="/center" replace />
);
}
里边进行逻辑判断,正确则返回传进来的要跳转的组件标签,反之跳转到另一个页面…
这样就学会了路由了~够详细不,不够再写😂😂😂
|