react路由02——react-routerV6 中路由表的使用(useRoutes钩子)

news/2024/7/15 1:14:52 标签: react.js, 前端, 前端框架

react路由02——react-routerV6 中路由表的使用(useRoutes钩子)

  • 1. 不使用路由表
    • 1.1 关于react-routerV6路由简单使用
    • 1.2 未配置路由表
  • 2. 路由表——useRoutes钩子
    • 2.1 配置路由表
    • 2.2 一级路由组件——useRoutes钩子
    • 2.3 二级路由组件——Outlet组件
    • 2.4 目录结构
    • 2.5 . 遇到的问题
      • 2.5.1 问题1:useRoutes() may be used only……
  • 3. 数据路由器——V6.4 Data APIs:
    • 3.1 简单介绍

1. 不使用路由表

1.1 关于react-routerV6路由简单使用

  • 请看下面的文章
    react路由01——react-routerV6 中路由传递参数的几种方式.

1.2 未配置路由表

  • 先看一下未配置路由表时的项目结构情况,如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 效果,如下:
    在这里插入图片描述
    在这里插入图片描述

2. 路由表——useRoutes钩子

2.1 配置路由表

  • 配置路由表如下:
    在这里插入图片描述
    import Home from "../pages/Home"
    import Dog from "../pages/Dog"
    import Cats from "../pages/Cat/Cats"
    import CatInfo from "../pages/Cat/Info/CatInfo"
    
    export default[
        {
            path:'/',
            element:<Home/>
        },{
            path:'/dog',
            element:<Dog/>
        },{
            path:'/cats/*',
            element:<Cats/>,
            children:[
                {
    	            // path:'info',
    	           // element:<CatInfo name='张三' age={18}/>
                    path:'info/:catId/:catName',
                    element:<CatInfo name='张三' age={18}/>
                }
            ]
        }
    ]
    

2.2 一级路由组件——useRoutes钩子

  • 原路由组件做如下修改(对比原版写法看上面 1.2 未配置路由表):
    在这里插入图片描述

    import React from "react"
    import {Link,useRoutes} from 'react-router-dom'
    import './index.css'
    
    import routes from "../../routes"
    
    function PetLef(){
    
        const myRoutes = useRoutes(routes);
    
        return(
            <div>
                <div className="myMainData left" >
                    {/* 编写路由链接  靠路由链接实现切换组件 */}
                    <ul>
                        <li><Link to="/">Home</Link></li>
                        <li><Link to="/dog">狗狗信息</Link></li>
                        <li><Link to="/cats">猫咪信息</Link></li>
                    </ul>
                </div>
                <div className="myMainData right" >
                    {/* 注册路由 */}
                    {myRoutes}
                </div>
            </div>
        )
    }
    export default PetLef;
    
    • 取参数
      在这里插入图片描述

2.3 二级路由组件——Outlet组件

  • 父路由元素中应使用 <Outlet> 来呈现其子路由元素。这样就可以在呈现子路由时显示嵌套用户界面。如果父路由完全匹配,则会呈现子索引路由;如果没有索引路由,则不会呈现任何内容。
  • 原路由组件做如下修改(对比原版写法看上面 1.2 未配置路由表):
    在这里插入图片描述
    import React,{useState} from "react";
    import {Link,Outlet} from 'react-router-dom'
    
    export default function Cats(){
    
        const [cats] = useState([
            {catId:'A1001',catName:'点点'},
            {catId:'A1002',catName:'阿苔'},
            {catId:'A1003',catName:'花花'}
        ]);
        return(
            <div>
                <h2>猫咪信息</h2>
                <ul>
                    {
                        cats.map((cat)=>{
                            return(
                                <li key={cat.catId}>
                                    {/* 编写路由链接 */}
                                    {/* <Link to='info'>
                                            {cat.catId}--{cat.catName}
                                    </Link> */}
                                    <Link to={`/cats/info/${cat.catId}/${cat.catName}`}>
                                            {cat.catId}--{cat.catName}
                                    </Link>
                                </li>
                            )
                        })
                    }
                </ul>
                <br /><br />
                {/* 二级路由——展示路由组件  二级路由不用useRoutes,用Outlet */}
                <Outlet/>
            </div>
        )
    }
    

2.4 目录结构

  • 如下:
    在这里插入图片描述

2.5 . 遇到的问题

2.5.1 问题1:useRoutes() may be used only……

  • 问题描述如下:
    useRoutes() may be used only in the context of a <Router> component.
    
    在这里插入图片描述
  • 问题原因
    使用路由表之后,BrowserRouter 标签,没有放在较高的位置,原项目里是放在了一个较高的组件路由里,其实应该放在更高的位置。
  • 解决问题:
    • 1⃣️ 可以将 BrowserRouter 标签放到App.js中,如下:
      在这里插入图片描述
    • 2⃣️ 当然也可以直接放到项目的入口位置,index.js 中,如下:
      在这里插入图片描述

3. 数据路由器——V6.4 Data APIs:

3.1 简单介绍

  • 如下:
    在这里插入图片描述
    详细使用,后续介绍

http://www.niftyadmin.cn/n/5028763.html

相关文章

DANAHER S21260-SRS伺服驱动器模块

DANAHER S21260-SRS伺服驱动器模块是一种用于控制伺服电机的设备&#xff0c;通常在自动化和工业控制系统中使用。它们的功能可以因制造商和型号而异&#xff0c;但通常包括以下一些常见功能&#xff1a; 电机控制&#xff1a;DANAHER S21260-SRS伺服驱动器模块的主要功能是控制…

MySql安装包配置

电脑重配过多次&#xff0c;此为mysql安装记录贴&#xff0c;方便查阅 从官网下载的安装包进行本地配置 下载地址 解压下载下来的zip压缩包 解压出来的文件中新增配置my.ini文件 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirD:\\software\\package\\M…

SpringBoot-接口幂等性

幂等 幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数或幂等方法是指可以使用相同参数重复执行&#xff0c;并能获得相同结果的函数。这些函数不会影响系统状态&#xff0c;也不用担心重复执行会对系统造成改变。 尤其是支付、订单等与金钱挂…

微信小程序 解决 当套在scroll-view中后 wx.pageScrollTo 函数失效问题解决

pageScrollTo 只是 页面的API 他对 scroll-view 的滚动是无法控制的 但是 scroll-view 也提供了一个scroll-into-view属性 我们编写一个小案例 wxml 参考代码如下 <view><scroll-view scroll-y"{{ true }}" style"height: 100vh;" scroll-into-v…

2020-2023中国高等级自动驾驶产业发展趋势研究-中国高等级自动驾驶发展近况

1.2 中国高等级自动驾驶发展近况 通过对中国高等级自动驾驶行业的观察和分析&#xff0c;亿欧汽车认为&#xff0c;除技术解决方案提供商外&#xff0c;如今的车企、政府、资本同样在产业链中扮演重要角色。此外&#xff0c;车路协同技术的发展也为高等级自动驾驶的发展提供了更…

LInux - mini_shell

结合进程替换的内容&#xff0c;我们可以自己实现一个简单的shell&#xff0c;shell是命令行解释器 #include<stdio.h> #include<unistd.h> #include<sys/wait.h> #include<string.h> #include<stdlib.h> #define MAX_C 128 #define MAX_CMD 32…

Android 12 源码分析 —— 应用层 五(SystemUI的StatusBar类的启动过程和三个窗口的创建)

Android 12 源码分析 —— 应用层 五&#xff08;SystemUI的StatusBar类的启动过程和三个窗口的创建&#xff09; 在前面的文章中&#xff0c;我们介绍了SystemUI App的基本布局和基本概念。接下来&#xff0c;我们进入SystemUI应用的各个UI是如何被加入屏幕的。那么我们就先从…

【电子元件】常用电子元器件的识别之电阻器

目录 前言1. 电阻器的识别1.1 普通电阻器的识别1. 普通电阻器的识别色环电阻器绕线电阻器水泥电阻器贴片电阻器网络电阻器(排阻)保险电阻器精密电阻器2. 电阻器的符号3. 普通电阻器的主要参数标称阻值和允许误差额定功率最高工作电压温度系数1.2 电位器的识别1. 电位器的识别…