IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react-router-dom v6 快速上手 -> 正文阅读

[JavaScript知识库]react-router-dom v6 快速上手

目录

第一章 :react-router-dom 简述

第二章 :v5 和 v6 区别

第三章 :简单的使用

前言

react-router-dom v6 距离更新也是有段时间了,相比于v5 来说,使用起来更加的方便,体积也更小,赶紧跟着我快速上手吧


提示:以下是本篇文章正文内容,下面案例可供参考

一、react-router-dom 简述

演示代码所使用的是这个版本┗|`O′|┛ 嗷~~?

1.下载

 npm install react-router-dom --save 
 
 // 或

 yarn add react-router-dom

2. 路由方面

?简单的路由大致需要引用这些

import { Route, Routes, BrowserRouter, Navigate } from 'react-router-dom'

二、v5 和 v6 区别

1.路由

? ?BrowserRouter? ?v6 的使用和v5 并无区别

? ?Routes? 代替? v5 的 Switch

? ?Route? 属性有所变化? 去掉了原来的 component? ?render? ?由element属性实现

? ?Navigate? 代替 v5 的? Redirect

? ?path 路径可以省略 "/"? 和 上一级的路径拼接,加上也不会影响?

import { Route, Routes, BrowserRouter, Navigate } from 'react-router-dom'
import Home from '../page/Home'
import Order from '../page/Order'
import User from '../page/User'

<BrowserRouter>
    <Routes>
        {/* 一级路由 */}
        <Route path='home' element={<Home />}>
            {/* 二级路由 */}
            <Route path='user' element={<User />}></Route>
        </Route>
        <Route path='order' element={<Order />}></Route>
        {/* 重定向 */}
        <Route path='/' element={<Navigate to="/home" />}></Route>
    </Routes>
</BrowserRouter>

? ? ??

这里有个注意的点二级路由需要在对应的一级路由添加一个路由出口

v6 新增的api? ? ? ? Outlet 直接解决这个问题?

?感觉非常Nice !!!

例如:

import React from 'react';
import { Outlet } from 'react-router-dom'
const Home = () => {
    return (
        <div>
            home
            {/* 路由出口 */}
            <Outlet />
        </div>
    );
}

export default Home;

?重定向问题也很好的处理 ,目前本人只发现这一种方法实现重定向? QAQ

例如 :

 <Route path='/' element={<Navigate to="/home" />}></Route>

v6 仅支持2种占位符:动态:id样式参数和??*通配符

<Route path='*' element={<NotFound/>}></Route>
 <Route path=':id' element={<My/>}></Route>
 <Route path='/detail/:id' element={<My/>}></Route>

1.路由跳转----Link

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

<Link to='user'>子路由跳转</Link>
<Link to='/order'>正常跳转</Link>

如果是往当前路由下的二级路由跳转则不需要? "/"

同级路由或其他路由,路径需要写全

2.路由跳转----NavLink

import { NavLink } from 'react-router-dom';
  
<NavLink to='user'>子路由跳转</NavLink>
<NavLink to='/order'>正常跳转</NavLink>

NavLink 是 Link 的一个特定版本,可以添加特定的属性,样式 && 逻辑,和以前版本一样不过多介绍?

3.useNavigate

useNavigate 替代以前的 history? ?

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

const Home = () => {
    const navigate = useNavigate()
    return (
        <div>
            home
            <div onClick={() => navigate('/order')}>
                普普通通的跳转
            </div>
            <div onClick={() => navigate('/order', { state: { a: 123 } })}>
                还能带个参数的跳转</div>
            </div >
    );
}

export default Home;

4.useLocation

传参就要接收参数

import React from 'react';
import { useLocation } from 'react-router-dom'

const Order = () => {
    const location = useLocation()
    console.log(location);
    return (
        <div>

        </div>
    );
}

export default Order;

4.useParams

获取地址栏参数

1.如果是这么跳转路由,那么就要用到这个啦??(⊙o⊙)

我传的id? 是? 1

<div onClick={() => navigate(`/home/user/${id}`)}>拼接地址栏传参大法</div>

2.参数来了来了

import React from 'react';
import { useParams } from 'react-router-dom';

const User = () => {
    const params = useParams()
    console.log(params);
    return (
        <div>
            
        </div>
    );
}

export default User;


?三?:简单的使用

来个简单的递归

?这是路由表

import Home from '../page/Home'
import Order from '../page/Order'
import User from '../page/User'

const pages = [
    {
        path: 'home',
        element: <Home />,
        name: 'home',
        children: [
            {
                path: 'user/:id',
                element: <User />,
                name: 'user'
            }
        ]
    },
    {
        path: 'order',
        element: <Order />,
        name: 'order'
    },
    {
        from : '/',
        to : '/home'
    }
]

export default pages

来个组件

import pages from "./page"
import { Route, Routes, BrowserRouter, Navigate } from 'react-router-dom'

const Router = () => {
    const mapRouter = (routes) => (
        routes.map((item, idx) => (
            item.path
                ? <Route path={item.path} element={item.element} key={idx}>
                    {   /* 如果有子路由 , 递归渲染 */
                        item.children && mapRouter(item.children)
                    }
                </Route>
                : <Route path={item.from} element={<Navigate to={item.to}/>} key={idx}></Route>
        ))
    )
    return (
        <BrowserRouter>
            <Routes>
                {mapRouter(pages)}
            </Routes>
        </BrowserRouter>
    )
}

export default Router

最后一点路由守卫,可以使用高阶组件在Route 里面实现,根据上述,自行参悟

例如 :

差不多就到这了...? 溜了溜了

总结

总的来说这个版本我很喜欢,我所提及的都是很基本的,简单易上手

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:25:24  更:2022-01-17 11:25:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:29:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码