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

news2024/11/29 0:44:25

配置

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;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Python人工智能] 四十六.PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解合如何利用keras和tensorflow构建基于注意力机制的CNN-BiLSTM-ATT-CRF模型,并实现中文实体识别研究。这篇文章将介绍PyTorch入门知识。前面我们的Python人工智能主要以TensorFlow和Keras为主,…

Flutter第十四弹 抽屉菜单效果

目标&#xff1a; 1.怎么构建抽屉菜单效果&#xff1f; 2.抽屉菜单怎么定制&#xff1f; 一、抽屉菜单 侧滑抽屉菜单效果 1.1 抽屉菜单入口 Flutter 的脚手架Scaffold&#xff0c;默认提供了抽屉菜单效果入口。 主页面采用一个简单的页面&#xff0c;侧滑菜单首先使用一个I…

三星与SK海力士:以混合键合技术引领3D DRAM革新之路

在高速缓存内存&#xff08;HBM&#xff09;领域持续领跑的三星与SK海力士&#xff0c;正以混合键合技术为突破口&#xff0c;开启3D DRAM技术的新纪元。这一战略转型不仅预示着存储技术的深度革新&#xff0c;更体现了两大半导体巨头在提高集成度、优化性能与成本上的不懈追求…

【计算机网络篇】数据链路层(11)在数据链路层扩展以太网

文章目录 &#x1f354;使用网桥在数据链路层扩展以太网&#x1f95a;网桥的主要结构和基本工作原理&#x1f388;网桥的主要结构&#x1f50e;网桥转发帧的例子&#x1f50e;网桥丢弃帧的例子&#x1f50e;网桥转发广播帧的例子 &#x1f95a;透明网桥&#x1f50e;透明网桥的…

图论——代码随想录打卡

1 DFS深度搜索算法 深度优先搜索算法是从一个方向去进行搜索&#xff0c;直到遇到走不下去的终点&#xff0c;再进行回溯更换方向&#xff0c;重新进行搜索。因此有回溯也就意味着存在递归&#xff1a; void dfs(参数&#xff09;{处理节点dfs(图&#xff0c;选择的节点)回溯…

Hi3861 OpenHarmony嵌入式应用入门--0.96寸液晶屏 iic驱动ssd1306

使用iic驱动ssd1306&#xff0c;代码来源hihope\hispark_pegasus\demo\12_ssd1306 本样例提供了一个HarmonyOS IoT硬件接口的SSD1306 OLED屏驱动库&#xff0c;其功能如下&#xff1a; 内置了128*64 bit的内存缓冲区&#xff0c;支持全屏刷新;优化了屏幕刷新速率&#xff0c;…

AI发展核心要素之一(算力)

背景&#xff1a; 当今时代&#xff0c;云计算、人工智能、视频会议、短视频和各种社交媒体等行业蓬勃兴起&#xff0c;而ChatGPT-OpenAI的一次又一次的版本更新和迭代更是将我们带入了AI时代的新纪元。在2023年底的华为全联接大会上&#xff0c;孟晚舟就曾在演讲中表示:“算力…

云计算【第一阶段(17)】账号和权限管理

目录 一、用户账号和组账号概述 1.1、用户账号的三种角色 1.2、组账号的两个角色 二、用户账号文件 2.1、/etc/passwd 2.2、/etc/shadow 2.3、chage 命令 三、组账号文件 3.1、/etc/group 3.2、/etc/gshadow 四、添加组账户 4.1、添加删除组成员 4.2、删除组账号 …

北航数据结构与程序设计查找与排序编程题

查找与排序编程题 单词查找&#xff08;查找——基本题&#xff09;排座位&#xff08;简&#xff09;a 单词查找&#xff08;查找——基本题&#xff09; 【问题描述】 从标准输入中读入一个英文单词及查找方式&#xff0c;在一个给定的英文常用单词字典文件dictionary3000.…

Maven 和 Gradle 构建工具的基本使用

Maven和Gradle是Java生态系统中最常用的构建工具&#xff0c;它们不仅能简化项目的构建过程&#xff0c;还能帮助管理项目依赖、打包、发布等任务。本文将详细介绍如何掌握Maven和Gradle的基本使用&#xff0c;帮助开发者快速上手并应用于实际项目中。 一、Maven 1.1 什么是M…

第三方软件测试机构流程分享,软件检测报告需多少时间和费用?

第三方软件测试机构是区别于软件开发方和需求方的第三者存在&#xff0c;是专门为客户提供全方位软件测试服务的第三方检测机构。测试流程经过精心设计和不断优化&#xff0c;以确保客户的软件品质得到有效保障&#xff0c;那么第三方软件测试机构的基本测试流程具体有哪些呢?…

一套二开版微交易系统 香港十大贵金属交易平台 贵金属交易平台 贵金属交易app下载 微盘交易系统

一套二开前端UI得贵金属微交易系统&#xff0c;前端产品后台可任意更换 此系统框架不是以往的至尊的框架&#xff0c;系统完美运行&#xff0c;K线采用nodejs方式运行 源码使用起来非常流畅&#xff0c;不像至尊卡成翔 源码下载&#xff1a;https://download.csdn.net/downl…

Macbook pro插硬盘没反应,Macbook pro移动硬盘读不了怎么办

为了弥补Macbook pro硬盘容量的缺失&#xff0c;我们有时候会使用到外接硬盘或移动硬盘。一般来说&#xff0c;这些硬盘都是即插即用的&#xff0c;可能部分要安装插件。不过&#xff0c;在一些特殊情况下&#xff0c;也会遇到插硬盘没反应等问题。本文会给大家解答Macbook pro…

Linux——ansible关于“文件操作”的模块

修改文件并将其复制到主机 一、确保受管主机上存在文件 使用 file 模块处理受管主机上的文件。其工作方式与 touch 命令类似&#xff0c;如果不存在则创建一个空文件&#xff0c;如果存在&#xff0c;则更新其修改时间。在本例中&#xff0c;除了处理文件之外&#xff0c;Ansi…

Excel中插入的图片在不同电脑上消失的问题及解决方法

在使用Excel时插入图片&#xff0c;然后在不同电脑上打开却发现图片消失并被替换为链接地址&#xff0c;这个问题通常出现于文件中的图片路径没有正确保存或者电脑上缺少相关的图片文件。下面让我们来详细解释这个问题以及可能的解决方法。 ### 问题原因分析1. **相对路径问题…

mysql8.0找不到my.ini

报错问题解释&#xff1a; MySQL 8.0 在Windows系统中通常不需要 my.ini 文件&#xff0c;因为安装程序会在 %PROGRAMDATA%\MySQL\MySQL Server 8.0\ &#xff08;通常是 C:\ProgramData\MySQL\MySQL Server 8.0\&#xff09;创建默认的配置文件。如果你的系统中找不到 my.ini…

Harmony设计模式-单例模式

Harmony设计模式-单例模式 前言 软件设计模式&#xff08;[Design pattern](https://baike.baidu.com/item/Design pattern/10186718?fromModulelemma_inlink)&#xff09;&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经…

中文分词词云图

目录 一、分词1、分词方式方法2、分词优缺点 二、jieba使用示例1、引入库2、切分模式3、加载自定义字典 三、词的可视化1、读取数据2、数据处理3、统计词频4、去除停用词5、词云图1、pyecharts绘图2、WordCloud绘图 一、分词 1、分词方式方法 以构词规则为出发点的规则分词 全…

科普文章:怎么远程监控电脑屏幕?三种监控电脑屏幕的方法

远程监控公司电脑屏幕是一项重要的管理手段&#xff0c;它不仅有助于提升工作效率&#xff0c;还能确保公司信息安全和合规性。随着远程办公的普及&#xff0c;这一需求变得日益重要。下面我将详细介绍几种实现远程监控公司电脑屏幕的方法&#xff0c;以及实施过程中需要注意的…

看完再买不后悔!希喂、小米、霍尼韦尔宠物空气净化器性价比比拼

在忙碌的工作之余&#xff0c;养一只猫真的能治愈一切的不快&#xff0c;让我们的心灵得到片刻的宁静。然而&#xff0c;这份宁静背后&#xff0c;却隐藏着一些不易察觉的烦恼——猫浮毛和异味。 猫浮毛&#xff0c;这个看似微不足道的小问题&#xff0c;实则给许多宠物主人带…