React路由笔记(函数组件,自用)

配置

npm i react-router-dom

基本使用

目录结构

在src中创建page文件夹放置各页面组件,router中放置路由
目录结构

1、router中配置路由

/router/index.js中,使用createBrowserRouter配置路由。

import { createBrowserRouter } from "react-router-dom";

import Login from '../page/Login';
import Article from "../page/Article";

const router = createBrowserRouter([
  {
    path: '/login',
    element: <Login/>
  },
  {
    path: 'Artical',
    element: <Article/>
  }
])

export default router;

2、在使用路由组件的地方包裹(这里在index.js中)

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

import { RouterProvider } from 'react-router-dom';
import router from './router';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <RouterProvider router={router}></RouterProvider>
  </React.StrictMode>
);
reportWebVitals();

3、路由跳转

3.1 声明式导航

引入Link标签,包裹需要导航的按钮,使用参数to绑定需要跳转到的路由

3.2 编程式导航

使用useNavigate钩子。这个比较灵活,可以在js代码中写

二者的用法

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

const Login = () => {
  const navigate = useNavigate()
  return (  
    <React.Fragment>
      <div>登录页</div>
      {/* 声明式 */}
      <Link to="/article">跳转到文章页</Link>
      {/* 编程式 */}
      <button onClick={()=> navigate('/article')}>跳转到文章页</button>
    </React.Fragment>
  );
}
 
export default Login;

4 传参

4.1 searchParams传参

传参使用?key1=value1&key2=value2
接收参数时,用useSearchParams钩子

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

const Login = () => {
  const navigate = useNavigate()
  return (  
    <React.Fragment>
      <div>登录页</div>
      <Link to="/article?id=123&name=test">跳转到文章页(带参数)</Link>
      <button onClick={()=> navigate('/article/1001')}>跳转到文章页(params传参)</button>
    </React.Fragment>
  );
}
 
export default Login;

接受参数

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

const Article = () => {
  const [params] = useSearchParams();
  const id = params.get('id');
  const name = params.get('name')
  return ( <div>
    文章页
    <div>
      id: {id},
      name: {name}
    </div>
  </div> );
}
 
export default Article;

4.2 params传参

传参时,/article/1001
接收时,用useParams钩子
这种传参需要在route中加上参数声明

import { createBrowserRouter } from "react-router-dom";

import Login from '../page/Login';
import Article from "../page/Article";

const router = createBrowserRouter([
  {
    path: '/login',
    element: <Login/>
  },
  {
    path: '/article/:id',
    element: <Article/>
  }
])

export default router;

传参同理,接收代码如下

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

const Article = () => {
  // const [params] = useSearchParams();
  // const id = params.get('id');
  // const name = params.get('name')
  const params = useParams();
  const id = params.id;
  return ( <div>
    文章页
    <div>
      id: {id},
    </div>
  </div> );
}
 
export default Article;

5、嵌套路由

1、在router中使用children配置子路由

import { createBrowserRouter } from "react-router-dom";

import Layout from "../page/Layout";
import Board from "../page/Board";
import About from "../page/About";

const router = createBrowserRouter([
  {
    path: '/',
    element: <Layout/>,
    children: [
      {
        path: 'board',
        element: <Board/>
      },
      {
        path: 'about',
        element: <About/>
      }
    ]
  }
])

export default router;

2、使用<Outlet/>组件配置二级路由的位渲染置
例如,根组件是<Layout/>,在Layout中:

import { Link, Outlet } from "react-router-dom";

const Layout = () => {
  return ( 
    <div>
      <div>一级路由</div>
      <div>
        <Link to="/board">面板</Link>
      </div>
      <div>
        <Link to="/about">关于</Link>
      </div>
      {/* 配置二级路由的出口 */}
      <Outlet/>
    </div>
   );
}
 
export default Layout;

若需要二级路由的默认展示页,则在router中不添加path,增加index: true即可。例:

import { createBrowserRouter } from "react-router-dom";

import Layout from "../page/Layout";
import Board from "../page/Board";
import About from "../page/About";

const router = createBrowserRouter([
  {
    path: '/',
    element: <Layout/>,
    children: [
      {
        index: true,
        element: <Board/>
      },
      {
        path: 'about',
        element: <About/>
      }
    ]
  }
])

export default router;

同时,<Link/>中的to也需要同步更改为/
此时,<Board/>默认显示

6、404配置

在路由表的末尾配置

  {
    path: '*',
    element: <NotFound/>
  }

7、路由模式设置

配置路由时,用createBrowserRouter就是history路由,用createHashRouter是hash路由,其他一致。

import { createBrowserRouter } from "react-router-dom";   // history路由
import { createHashRouter } from "react-router-dom";  // hash路由

const router = createHashRouter([

])

export default router;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/729978.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mybatis框架相关问题总结(本地笔记搬运)

1、背景 2、运行启动问题 问题一 运行spring boot项目时报错&#xff1a;‘factoryBeanObjectType‘: java.lang.String 解决一 版本问题&#xff0c;springframework版本和mybatis/mybatis-plus版本不兼容。现spring-boot使用3.3.0版本&#xff0c;mybatis-plus使用3.5.7…

js处理数据(过滤)

复选框的值这里为true或false 选中为true&#xff0c;未选中为false 看看数据&#xff1a; type中的前面那些字母是固定的不会变 括号里面的不固定&#xff0c;那就把固定的作为前缀去过滤&#xff0c;后面怎么变都无所谓&#xff0c;当checkbox三个值中的某个或某些值为false时…

如何使用LiveTargetsFinder生成实时活动主机URL列表

关于LiveTargetsFinder LiveTargetsFinder是一款功能强大的实时活动主机生成工具&#xff0c;该工具可以为广大研究人员以自动化的形式生成可供分析和测试的实时活动主机URL列表&#xff0c;并通过MassDNS、Masscan和Nmap自动过滤出无法访问的主机。 我们只需要提供一个域名作…

视频融合共享平台LntonCVS视频监控管理平台技术方案详细介绍

LntonCVS国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发&#xff0c;提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能&#xff0c;包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲…

【数据分享】《中国改革年鉴》1989-2022

最近老有同学过来询问《中国经济体制改革年鉴》、《中国改革年鉴》这两本数据的关系以及怎么获取这两本本数据。今天就在这里给大家分享一下这三本数据的具体情况。 《中国改革年鉴》由国家发展和改革委员会主管,中国经济体制改革研究会主办,中国经济体制改革杂志社编辑出版,是…

大数据存储技术笔记

目录 大数据的特性 HDFS 读流程的基本步骤 HDFS 写流程的基本步骤 Mapreduce的执行过程 MapReduce 中 combiner 作用 hadoop 调度器及其工作方法 Hive 中内部表与外部表区别(创建删除角度) Hadoop 的 2 个主要组件及其功能 Hadoop MapReduce 的工作流程 正常工作的 ha…

Jmeter性能 之 “查看结果树” 界面功能介绍

前言 查看结果树 显示所有请求响应的树&#xff0c;通过它可以查看任何请求的响应。除了显示响应之外&#xff0c;还可以查看获取响应所花费的时间以及一些响应代码。需要通过"查看结果树"来查看服务器处理请求之后的返回结果&#xff0c;分析是否存在问题 注意&am…

VoIP Hopper一键分析VoIP 网络信息(KALI工具系列二十九)

目录 1、KALI LINUX 简介 2、VoIP Hopper工具简介 3、信息收集 3.1 目标主机IP 3.2kali的IP 4、操作实例 4.1 VLAN 跳跃攻击 4.2 指定MAC地址 4.3 设置参数 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版 &#xff0c;广泛用于网络…

【深度学习】GPT1,提高语言理解的生成预训练方法

论文&#xff1a; https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf 文章目录 提高语言理解的生成预训练方法摘要引言相关工作自然语言处理的半监督学习无监督预训练辅助训练目标 框架无监督预训练有…

VMware Workstation安装Windows Server2019系统详细操作步骤

虚拟机版本 VMware Workstation 16 Prp 16.2.5 build-20904516 实现操作 创建虚拟机 创建新的虚拟机 自定义->下一步 默认即可&#xff0c;下一步 稍后安装操作系统->下一步 按照图下所示选择好系统->下一步 设置好虚拟机名称和位置->下一步 默认即可&#xff0…

大数据学习-环境准备

VMware 部分 网络设置 下载好 CentOS 7 的镜像文件 修改 VMware 的网络 把子网 ip 修改为 192.168.88.0&#xff0c;然后点击 NAT 设置&#xff0c;修改网关 IP 为 192.168.88.2 之后就确定即可 虚拟机安装 选择镜像文件&#xff0c;使用 VMware 的典型安装方法即可&#…

jQuery 基本操作

01-简介 jQuery 是一个功能丰富且广泛使用的 JavaScript 库&#xff0c;它简化了 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作。jQuery 通过其易用的 API&#xff0c;使复杂的 JavaScript 编程任务变得更加简单&#xff0c;并且兼容各种浏览器。 1、jQuery特点 简化 DOM …

智慧工厂监控可视化解决方案(160页WORD)

方案介绍&#xff1a; 本智慧工厂监控可视化解决方案通过集成先进的物联网和大数据技术&#xff0c;为制造业企业提供了全面的数字化转型支持。通过实时监控、数据分析、可视化展示等功能&#xff0c;帮助企业提升生产效率、降低运营成本、优化产品质量和能源利用率&#xff0…

设计模式(三)代理模式

目录 一、什么是代理模式 二、静态代理 1、定义 2、代码 2.1、接口 2.2、被代理对象 2.3、代理对象 2.4、测试 三、动态代理 1、定义 2、代码 2.1、接口 2.2、目标对象 2.3、代理对象 2.4、测试 一、什么是代理模式 代理模式(Proxy Pattern)是一种结构性模式。代理模…

注塑件检测视觉检测中可能遇到的外观缺陷

机器视觉检测注塑件不良特征有哪些&#xff1f;按照检测需求一般分为两类&#xff1a;外观缺陷和尺寸缺陷。但由于注塑件的工艺特点及原材料特性&#xff0c;注塑件外观缺陷在生产过程中出现的概率于频率远远大于尺寸缺陷。 注塑件检测视觉检测中可能遇到的外观缺陷 1、色差&a…

CyberBattleSim-(内网自动化渗透)研究分析

01 背景知识介绍 CyberBattleSim介绍 CyberBattleSim是一款微软365 Defender团队开源的人工智能攻防对抗模拟工具&#xff0c;来源于微软的一个实验性研究项目。该项目专注于对网络攻击入侵后横向移动阶段进行威胁建模&#xff0c;用于研究在模拟抽象企业网络环境中运行的自动…

深入研究websocket直播中signature这个参数怎么来的,模拟自己生成一个

上一节课我们已经找到了生成signature这个字段的代码位置&#xff0c;就是这个B函数&#xff0c;嗯......听起来好像有点奇怪&#xff0c;但是它确实叫B啊&#xff0c;笑死。不管了&#xff0c;看一下里面的逻辑是啥。 注意e参数的内容是&#xff1a; {"app_name":…

Java基础之练习(2)

需求: 键盘录入一个字符串,使用程序实现在控制台遍历该字符串 package String;import java.util.Scanner;public class StringDemo5 {public static void main(String[] args) {//录入一个字符串Scanner sc new Scanner(System.in);System.out.println("请输入一个字符串…

vue3 antdv RadioButton默认值选择问题处理

1、先上官方文档&#xff1a; Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 官方代码&#xff1a; <template><div><div><a-radio-group v-model:value"value1"><a-radio-button value"a…

网络编程5----初识http

1.1 请求和响应的格式 http协议和前边学过的传输层、网络层协议不同&#xff0c;它是“一问一答”形式的&#xff0c;所以要分为请求和响应两部分看待&#xff0c;同时&#xff0c;请求和响应的格式是不同的&#xff0c;我们来具体介绍一下。 1.1.1 请求 在介绍请求之前&…