React-Router-6学习笔记

一、新建react项目

1、新建项目命令:

yarn create vite react-router --template react

2、在vsCode中打开项目

3、在vsCode打开命令终端,输入

yarn

4、执行yarn dev启动当前项目

yarn dev

5、删除多余的东西,保留app.jsx和main.jsx文件即可

6、重新打开终端,安装react-router(版本:"react-router-dom": "^6.16.0")

yarn add react-router-dom

二、快速搭建一个简单的路由demo

1、引入createBrowserRouter方法和RouterProvider组件

  • main.jsx文件引入: 

React-Router-6学习笔记_第1张图片

  • 代码: 
import { createBrowserRouter, RouterProvider } from 'react-router-dom'

 注意:

createBrowserRouter:创建路由实例在方法中定义路由path和组件的对应关系。

RouterProvider:作为一个组件渲染 并且传入createBrowserRouter执行之后生成的router实例。

2、调用 createBrowserRouter配置路由path和组件的对应关系生成router实例

  • main.jsx文件router:  

React-Router-6学习笔记_第2张图片

  • 代码:
const router = createBrowserRouter([
  {
    path:'/',
    element:
home
}, { path:'/login', element:
login
} ])

3、渲染RouterProvider组件并传入router实例

  • main.jsx文件组件:

 React-Router-6学习笔记_第3张图片

  • 代码:

三、抽离单独组件和路由独立文件

1、抽离单独组件

  •  新建一个文件夹,再新建三个jsx文件的组件

React-Router-6学习笔记_第4张图片

  • 其中一个代码:(其余三个代码差不多,换一下名字就行)
const Home = () => {
    return 
Home
} export default Home
  •  在main.jsx文件里引入:

React-Router-6学习笔记_第5张图片

  • 将引入的组件放到对应的element里去

React-Router-6学习笔记_第6张图片

 运行结果展示:

React-Router-6学习笔记_第7张图片

React-Router-6学习笔记_第8张图片

2、配置路由独立文件

  • 新建一个文件用来抽离路由

 React-Router-6学习笔记_第9张图片

  • 将main.jsx文件中对路由的配置移动过去,且将router进行导出 
import { createBrowserRouter } from 'react-router-dom'

import About from '../pages/About.jsx'
import Home from '../pages/Home.jsx'
import Login from '../pages/Login.jsx'

const router = createBrowserRouter([
    {
        path: '/',
        element: 
    },
    {
        path: '/login',
        element: 
    },
    {
        path: '/about',
        element: 
    }
])

export default router
  • main.jsx文件引入router(其他照旧)
import router from './router/index'

运行结果与上面一致

四、路由的两种模式说明

 1、history模式

注意:利用createBrowserRouter创建的路由属于history模式

React-Router-6学习笔记_第10张图片

  • 代码:
import { createBrowserRouter } from 'react-router-dom'

const router = createBrowserRouter([
    
])

2、hash模式 

注意:利用createHashRouter创建的路由属于hash模式

React-Router-6学习笔记_第11张图片

  • 代码:
import { createHashRouter } from 'react-router-dom'

const router = createHashRouter([

])

3、hash模式和history模式的区别

 注意:最简单的区别就是路由访问的时候一个有#一个没有。history模式需要后端的支持,hash模式不需要。

  • hash:http://localhost:5173/#/about
  • history: http://localhost:5173/about

React-Router-6学习笔记_第12张图片

 五、编程是导航实现

1、导入一个useNavigate钩子函数

import { useNavigate } from 'react-router-dom'

2、执行useNavigate函数得到跳转函数

React-Router-6学习笔记_第13张图片

  • 代码:
const navigate = useNavigate()

3、在事件中执行跳转函数执行路由跳转

React-Router-6学习笔记_第14张图片

  • 整体代码:
import { useNavigate } from 'react-router-dom'

const Home = () => {
    const navigate = useNavigate()
    const goAbout = () => {
        navigate('/about')
    }
    return 
} export default Home

六、路由记录替换

注意:路由跳转过去后,直接销毁上一页路由,点击返回无法返回上一页。 

  • 将跳转事件中的函数navigate函数第二个参数加上

React-Router-6学习笔记_第15张图片

  •  代码:
navigate('/', { replace: true })

七、路由跳转传参useSearchParams

1、searchParams传参

传参: 

注意:查询只字符串传参的方式比较简单,参数的形式以问号拼接到地址后面。

  •  直接在navigate函数里?加上传递的参数

React-Router-6学习笔记_第16张图片

  • 代码:
navigate('/about?id=123')

接收参数: 

  • 引入useSearchParams函数
import { useSearchParams } from 'react-router-dom'
  • 解构useSearchParams方法 ,通过get方法获取值

React-Router-6学习笔记_第17张图片

  • 代码: 
const [params] = useSearchParams()
let id = params.get('id')

代码演示: 

  • 在home页面点击button跳转到about页面

 React-Router-6学习笔记_第18张图片

  • about页面已经将值显示在了连接上,和页面上 

React-Router-6学习笔记_第19张图片

2、useSearchParams传递多个参数

传递参数: 

  • 在原始传参的后面有&符号做传参的分割

React-Router-6学习笔记_第20张图片

  • 代码:
navigate('/about?id=123&name=简隋英')

接收参数: 

  • 引入useSearchParams函数
import { useSearchParams } from 'react-router-dom'
  • 解构useSearchParams方法 ,通过get方法获取值

React-Router-6学习笔记_第21张图片

  • 代码: 
    const [params] = useSearchParams()
    let id = params.get('id')
    let name = params.get('name')

代码演示: 

  • 在home页面点击button跳转到about页面

 React-Router-6学习笔记_第22张图片

  • about页面已经将值显示在了连接上,和页面上 

React-Router-6学习笔记_第23张图片

八、路由跳转传参params

传递参数:

  •  在home页面的跳转函数后面添加( /参数 )
navigate('/跳转页面/参数数据')
  •  例子:

React-Router-6学习笔记_第24张图片

navigate('/about/123')
  • 在路由配置文件里,去配置动态路由( /:属性 ) 
  • 例子:

React-Router-6学习笔记_第25张图片

接收参数:

  • 引入useParams获取接收参数的函数 
import { useParams} from 'react-router-dom'
  •  调用useParams获取所有传递过来的值
let params = useParams()
//该代码运行结果
{ id: 123 }
  • 或传递过来的值
let id = params.id

React-Router-6学习笔记_第26张图片

 九、嵌套路由

场景:在我们做的很多管理后台系统中,通常我们都会设计一个Layout组件,在它内部实现嵌套路由。

React-Router-6学习笔记_第27张图片

 

1、准备二级路由组件Board和Article

 React-Router-6学习笔记_第28张图片

  • 组件内容:(Board和Article差不多)
const Board = () => {
    return 
Board
} export default Board

 

2、在路由表中通过children属性,进行二级路由配置在

  • 在index.jsx中引入组件
// 二级路由引入
import Article from '../pages/second/Article.jsx'
import Board from '../pages/second/Board.jsx'
  • 配置路由表中的children属性

React-Router-6学习笔记_第29张图片 

  • 代码:
const router = createBrowserRouter([
    {
        path: '/',
        element: ,
        children: [
            {
                path: 'article',
                element: 
}, { path: 'board', element: } ] }, { path: '/login', element: }, { path: '/about/:id', element: } ])

 

3、通过内置组件Outlet渲染二级路由组件

  • 在Home组件内,需要二级页面渲染的地方添加outlet组件

React-Router-6学习笔记_第30张图片

  • 代码: (需要引入)
import { Outlet, useNavigate } from 'react-router-dom'

 

4、通过内置组件Link进行声明式导航配置

  •  引入Link组件
import { Outlet, useNavigate,Link } from 'react-router-dom'
  • 配置Link组件的跳转

 React-Router-6学习笔记_第31张图片

运行结果:

React-Router-6学习笔记_第32张图片 

 注意:Link上的路由是,原始路由+二级路由地址

React-Router-6学习笔记_第33张图片

 React-Router-6学习笔记_第34张图片

 

十、默认二级路由渲染

 1、设置index:true,

  •  直接将需要作为默认页的path设置为index:true就可以了

React-Router-6学习笔记_第35张图片

  • 执行显示:(跳转页面后Article组件直接显示出来) 

React-Router-6学习笔记_第36张图片 

 

2、将Link默认的渲染路径改成主页面的路径

 React-Router-6学习笔记_第37张图片

 React-Router-6学习笔记_第38张图片

 

十一、404页设计 

1、引入NotFund页面

import NotFund from '../pages/NotFund'

2、路由页面设置*

React-Router-6学习笔记_第39张图片

3、配置NotFund组件内容

const NotFund = () => {
    return 
404
} export default NotFund

4、执行结果

React-Router-6学习笔记_第40张图片

 

完 

你可能感兴趣的:(react)