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;

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

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

相关文章

Pure Nature 2 : Mountains

3D样式化的自然环境资源 所有东西都配有预制件,随时可以放在现场。 包含URP版本! 此包包含: 植被 -云杉 -松树 -冷杉 -布什 -蘑菇 -草地 草,树枝,蕨类植物,各种… -鲜花 浆果,胡萝卜,雏菊,浓香,薰衣草,羽扇豆,各种… -蘑菇 岩石 -悬崖 -巨石 -岩石和卵石 -山脉 材料…

webp动图转gif

目录 前言 解决过程 遇到问题 获取duration 前言 上一次我们实现了webp转jpg格式&#xff1a; https://blog.csdn.net/weixin_54143563/article/details/139758200 那么对于含动图的webp文件我们如何将其转为gif文件呢&#xff1f; 之所以会出现这个问题&#xff0c;是因…

【python】PyQt5初体验,窗口等组件开发技巧,面向对象方式开发流程实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

哥伦比亚大学突破性的方法- Diffusion Policy:利用Action Diffusion进行视觉运动策略学习

Diffusion Policy&#xff1a;利用Action Diffusion进行视觉运动策略学习 1. 论文概述 这篇论文提出了一种名为Diffusion Policy的新方法&#xff0c;通过将机器人的视觉运动策略表示为条件扩散去噪过程来生成机器人行为。作者在15个不同的机器人操作基准测试任务上对Diffusi…

VR虚拟现实(Virtual Reality)

虚拟现实&#xff08;Virtual Reality&#xff09;是一种通过计算机技术和设备模拟现实世界的环境和体验的技术。它创造了一个虚拟的三维环境&#xff0c;用户可以通过穿戴设备和感应器与该环境进行互动和沉浸。 虚拟现实技术包括以下几个关键组成部分&#xff1a; 头戴设备&a…

【漏洞复现】红帆iOffice.net wssRtSyn接口处存在SQL注入

【产品&&漏洞简述】 红帆iOffice.net从最早满足医院行政办公需求&#xff08;传统OA&#xff09;&#xff0c;到目前融合了卫生主管部门的管理规范和众多行业特色应用&#xff0c;是目前唯一定位于解决医院综合业务管理的软件&#xff0c;是最符合医院行业特点的医院综…

Python网络安全项目开发实战,如何防命令注入

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程: Python网络安全项目开发实战_防命令注入_编程案例解析实例详解课程教程.pdf 在Python网络安全项目开发中,防止命令注入(Command Injection)是一项…

MyBatis 动态 SQL怎么使用?

引言&#xff1a;在现代的软件开发中&#xff0c;数据库操作是任何应用程序的核心部分之一。而在 Java 开发领域&#xff0c;MyBatis 作为一款优秀的持久层框架&#xff0c;以其简洁的配置和强大的灵活性被广泛应用。动态 SQL 允许开发人员根据不同的条件和场景动态地生成和执行…

ChatGPT 提问攻略:从基础到精通,掌握AI对话的艺术

提示工程&#xff08;Prompt Engineering&#xff09;的核心目标是提高 AI 输出的质量和准确性&#xff0c;让 AI 的输出结果可控&#xff0c;而不是随机的。 成功使用 ChatGPT 的关键在于提示语的质量&#xff1a;清晰、简洁的提示语有助于保持对话的连贯性&#xff0c;而模糊…

【机器学习300问】127、怎么使用词嵌入?

在探讨如何使用词嵌入之前&#xff0c;我们首先需要理解词嵌入模型的基础。之前的文章已提及&#xff0c;词嵌入技术旨在将文本转换为固定长度的向量&#xff0c;从而使计算机能够解析和理解文本内容。可以跳转下面链接去补充阅读哦&#xff01; 【机器学习300问】126、词嵌入…

会声会影2024旗舰版汉化最新安装包下载方法步骤

嗨&#xff0c;亲爱的CSDN的朋友们&#xff01;&#x1f389;今天&#xff0c;我要跟大家分享一款让你的视频编辑体验升级的神器——会声会影2024最新版本&#xff01;✨如果你是一个热衷于创作视频内容的创作者&#xff0c;那么你一定不能错过这个软件。它不仅功能强大&#x…

tqdm软件包讲解

tqdm软件包 tqdm是一个用于在Python中显示进度条的模块&#xff0c;非常适合用于长时间运行的循环和任务&#xff0c;使得用户可以直观地看到任务的进度。以下是对 tqdm 软件包的详细讲解&#xff0c;包括安装、基本使用、进阶用法和常见应用场景。 安装tqdm 安装tqdm可以使…

maven dependencyManagement作用

Maven 的 dependencyManagement 元素是一个非常强大的功能&#xff0c;它允许在一个父 POM&#xff08;Project Object Model&#xff09;文件中统一管理项目中所有子模块依赖的版本和范围。使用 dependencyManagement 可以确保项目中的所有模块使用一致的依赖版本&#xff0c;…

Windows桌面运维----第五天

1、华为路由怎们配置IP、划分vlan、互通&#xff1a; 1、用户模式→系统模式&#xff1b; 2、进入相关端口&#xff0c;配置IP地址&#xff1b; 3、开通相应vlan,设置vlanX、IP地址&#xff1b; 4、绑定相关端口&#xff0c;设置端口类型&#xff1b; 5、电脑设置IP&#…

一款Wordpress网站导航主题,带昼夜切换功能

Wordpress网站导航主题&#xff0c;带昼夜切换功能。 基于wordpress&#xff0c;部署和使用都比较方便。 界面比较简洁大方。后台管理功能也比较全面&#xff0c;值得一试。 这款主题界面、功能都非常简洁。 作者把这款定位为简约导航主题&#xff0c;所以这款wordpress导航…

ubuntu 22.04安装mongodb7

1、环境更新 sudo apt update sudo apt upgrade 要执行curl命令&#xff0c;需先安装此包 sudo apt-get install curl2、生成MongoDB的gpg秘钥和向APT导入MongoDB7.0版软件包的资源链接 curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg -o /usr/share/keyri…

uniapp小程序获取右上角胶囊位置信息

文章目录 导文使用uni.getMenuButtonBoundingClientRect();方法实现完整案例 隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 导文 uniapp小程序获取右上角胶囊位置信息 使用uni.getMenuButtonBoundingClientRect();方法实现 <script>const menuButtonInfo uni.getMe…

被神化了的AI

多模态的大模型&#xff0c;已经在图片、文本、音频、视频领域多点开花&#xff0c;“AI取代人类”的声音不绝与耳&#xff0c;似乎AI是万能药&#xff0c;包治百病。所有互联网时代的应用&#xff0c;都可以用AI重做一遍&#xff0c;所有你能用到的难题&#xff0c;你都会想&a…

【python】flask中如何向https服务器传输信息

【背景】 用flask做一个支持流媒体传输的网页,如何将信息post给流媒体服务器呢? 【方法】 简单例子,视图函数这么写: url = "https://yourip/mytext" headers = {Content-Type:application/octet-stream} @app.route(/,methods=["POST"

zdppy_amauth如何测试批量获取用户绑定的所有权限:思路

简单的思路 1、添加用户 2、添加角色 3、绑定用户和角色的关系 4、添加3个权限 5、绑定角色和权限关系&#xff0c;给角色绑定2个权限 6、查询用户绑定的所有权限 7、删除用户 8、删除角色 9、删除权限 10、解绑用户的所有角色 11、解绑角色的所有权限