react-router-dom v6 版本使用内容详解
- 1.路由组件
(1-1) v6 方式一 react-router-dom 常规 (1-2) v6 方式二 react-router-dom 使用 useRoutes
- 2.页面跳转
(2-1) Link 组件跳转 (2-2) useNavigate hooks跳转,代替useHistory
- 3.获取路由的参数
(3-1) useParams 获取动态路由的值 (3-2) useSearchParams 获取查询字符串的值 (3-3) useLocation 获取上一个页面传递进来的 state 参数 v5、v6一样
官网:https://reactrouter.com/docs/en/v6
安装:
//自己选一个,几种方式都可以
npm方式:
npm install --save react-router-domcnpm方式:
cnpm install --save react-router-domyarn方式:
yarn add react-router-dom
指定版本:使用@
yarn add react-router-dom@5.2.1
见:package.json文件内dependencies新增了react-router-dom的版本号,即安装成功
重启下项目(不需要install)
1.路由组件 BrowserRouter:引用不变
Routes:替换 v5 的 Switch 组件
Route:引用不变。参数 element 替换 v5 的 component、render 组件
(1-1) 创建 src/routers/index.js
import Home from '../views/Home';
import About from '../views/About'
import Err404 from '../views/Err404'
const routers = [
{
title: '首页',
path: '/',
component: Home,
},
{
title: '关于',
path: '/inbox',
component: About,
},
{
title: '404',
path: '/inbox',
component: Err404,
}
];
export default routers;
(1-2) 调用
v6 方式一 react-router-dom 常规(推荐 - 可以设置title更方便)
// v6 方式一
import React from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import routers from './routers';
const App = () => {
return (
// 不是老版本的:Switch
{routers.map((item, index) => {
return (
} // 不是老版本的:component 或 render
// onEnter、onBeforeMount、onMounted事件,会在组件初始化时执行一次,切换路由不执行
// 若 修改 document.title 查看文档:https://blog.csdn.net/weixin_44461275/article/details/122843160
/>
);
})}
);
};
export default App;
//v5
import React from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import routers from './routers';
const App = () => {
return (
>
{routers.map((item, index) => {
return (
{ // 推荐使用 render 不用 component
document.title = item.title;
return ;
}}
//或:
//component={ }
/>
);
})}
);
};
export default App;
v6 方式二 react-router-dom + 使用 useRoutes
//路由json组件
import Layout from '../layout'
import About from '../views/About'
import Home from '../views/Home'
import AboutIndex from '../views/About/Component/AboutIndex'
import AboutList from '../views/About/Component/AboutList'
import Error404 from '../views/Error404'const routes = [
{
path: "/",
element: ,
children: [
{
index : true,
element:
},
{
path: "/about",
element: ,
children: [
{ index : true, element: },
{ path : "/about/:id", element : }
]
},
]
},
{
path: "*",
element: ,
}
]export default routes//app.js
import React from 'react';
import { BrowserRouter as Router, useRoutes } from 'react-router-dom';
import routers from '../routers';
function App() {
const GetRoutes = () => useRoutes(routers);
//一定要是函数内return (
);
}export default App;
2.页面跳转 【react技术栈及全家桶|react-router-dom v6 版本使用内容详解】(2-1) Link 组件跳转
import React from "react";
import { Link } from "react-router-dom";
function DEMO() {
return (
点击跳转页面
);
}export default DEMO;
(2-2) useNavigate hooks跳转,代替useHistory
import React from "react";
import { useNavigate } from "react-router-dom";
function DEMO() {
const navigate = useNavigate();
// 点击跳转页面
function hrefAaa() {
navigate('/aaa')
}// history replace模式
function hrefReplace() {
navigate("/aaa", { replace: true });
}// history.go(-1)
function historyBack() {
navigate(-1);
} // 跳转带参数
function hrefState() {
navigate("/test", {
state: { test: 111 },
});
}return (
<>
点击跳转页面
history replace模式
返回上一个页面
>
);
}export default DEMO;
3.获取路由的参数
- useParams 获取动态路由的值
- useSearchParams 获取查询字符串的值
- useLocation 获取上一个页面传递进来的 state 参数 v5、v6一样
import React,{ useEffect } from "react";
import { useParams, useSearchParams, useLocation } from "react-router-dom";
export default function GoodsDetail() {
const params = useParams();
// 获取动态路由的值
const [searchParams, setSearchParams] = useSearchParams();
// 获取查询字符串的值
const location = useLocation();
// 获取上一个页面传递进来的 state 参数useEffect(() => {
// 一个对象,key 为动态字符串的 key
console.log(params);
// {id: '123'} console.log(location.state);
// { test: 111 }上一个页面带参获取 非url上面的search// 输入 http://localhost:3000/goods/123?name=1111
console.log(searchParams.get("name"));
// 111
}, []);
const handleSetSearch = () => {
// 新增-修改
setSearchParams({
keyName: 2222
});
// /aaa?keyName=2222
};
return (
Page
);
}
推荐阅读
- react|React 组件与组件实例的三大属性
- #|React组件实例的三大属性
- react.js|react-router-dom V6的配置使用
- react|react 路由(react-router-dom 的使用)
- 微信小程序(黑马)|【uniapp小程序】视图容器cover-view
- JS知识总结|【JavaScript复习十八】预解析
- java|含文档+PPT+源码等]精品微信小程序校园第二课堂+后台管理系统|前后分离VUE[包运行成功]计算机毕业设计项目源码Java毕设项目
- 毕业设计|基于Nodejs的心理咨询微信小程序的设计和实现
- JS知识总结|【JavaScript复习十七】作用域以及变量提升