React:Router-1.BrowserRouter组件式

使用步骤
  1. 安装 react-router-dom 依赖
$ npm install react-router-dom@6
  1. 导入 BrowserRouter, Link, Routes, Route 对象
import {BrowserRouter, Link, Routes, Route} from 'react-router-dom';

3.BrowserRouter:history模式路由; HashRouter:哈希模式路由
示例:

// app.js
import React from "react";
import {BrowserRouter, Link, Routes, Route} from 'react-router-dom';
import Home from './Home';
import About from "./About";

function App() {
  return (
    <BrowserRouter>
      <Link to="/">首页</Link>
      <Link to="/about">关于</Link>

      <Routes>
        <Route path="/" element={<Home />}></Route>
        <Route path="/About" element={<About />}></Route>
      </Routes>
    </BrowserRouter>
  )
}

export default App;


// About.js

function About() {
    return (
        <div>关于</div>
    )
}

export default About;

// Home.js

function Home() {
    return (
        <div>首页</div>
    )
}

export default Home;

在这里插入图片描述

编程式导航

使用 useNavigate 函数实现

// 1.导入 useNavigate 函数
import {useNavigate} from 'react-router-dom';

function Home() {
    const navigate = useNavigate();

    // 2.跳转到 Login 组件
    const goLogin = () => {
      navigate('/Login');
    }

    return (
        <div>首页
            <button onClick={goLogin}>登录</button>
        </div>
    )
}

export default Home;

路由传参
1. /about?id=100&name=李白
// 传参
navigate('/Login?id=1001&name=李白');

// 取参数
import {useSearchParams} from 'react-router-dom';

const [params] = useSearchParams();
const id = params.get("id");
const name = params.get("name");
2./about/1000
// 传参
navigate('/Login/1000');

// 取参数
import {useParams} from 'react-router-dom';

const params = useParams();
const id = params.id
嵌套路由

Outlet 声明嵌套路由出口
如下 Layout 下边包含两个 二级路由 UserInfo
其中,通过增加 index属性 来设置默认项

// Layout.jsx
import { Outlet } from "react-router-dom";

export default function Layout() {
    return (
        <div>
            Layout
            {/* 二级路由出口 */}
            <Outlet></Outlet>
        </div>
    )
}

// App.js
function App() {

  return (
    <BrowserRouter>
      <Link to="/">首页</Link>
      <Link to="/about">关于</Link>

      <Routes>
        <Route path="/" element={<Home />}></Route>
        <Route path="/About" element={<About />}></Route>
        <Route path="/Login" element={<Login/>}></Route>
        <Route path="/Layout" element={<Layout/>}>
          {/** index 设置该路由为默认项 */}
          <Route index element={<Info/>}></Route>
          <Route path="User" element={<User/>}></Route>
        </Route>
      </Routes>
    </BrowserRouter>
  )
}

在这里插入图片描述

404匹配
function App() {

  return (
    <BrowserRouter>
      <Link to="/">首页</Link>
      <Link to="/about">关于</Link>

      <Routes>
        <Route path="/" element={<Home />}></Route>
        <Route path="/About" element={<About />}></Route>]
        {/** 所有路由都未匹配上 404兜底 */}
        <Route path="*" element={<NotFound />}></Route>
      </Routes>
    </BrowserRouter>
  )
}
路由懒加载

需要借助 lazySuspense

import {lazy, Suspense} from "react";
import {createBrowserHistory} from "history";
import {HistoryRouter} from "react-router-dom";

// 按需导入组件
const Login = lazy(() => import("./pages/Login"));

let history = createBrowserHistory();

// 使用 Suspense 包裹着组件, fallback中设置的是 loadig样式
function App() {
	return (
		<HistoryRouter histtory={history}>
			<Suspense
				fallback={
					<div
						style={{
							textAlign: 'center',
							marginTop: 200
						}}
					>
						Loading....
					</div>
				}
			>
				<Routes>
					....
				</Routes>
				
			</Suspense>
				
		</HistoryRouter>
	)
}

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

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

相关文章

Flask gevent启动报错UnicodeDecodeError

文章目录 环境代码报错Track解决思路 环境 acondana 24.1.2python 3.7.13 32bitflask 2.2.3gevent 21.8.0 代码 port 7236 logging.basicConfig(levellogging.INFO, # 控制台打印的日志级别filename./logs/app.log, # 将日志写入log_new.log文件中filemodea, # 模式&…

python笔记:dataclass

1 引子&#xff1a;其他类似实现方法的局限性 假设我们现在需要实现这样的内容&#xff1a; nameChinaarea960population140967 1.1 tuple/list country1_tuple(China,960,140967) country1_tuple[0] #China 缺点&#xff1a;需要记住各个属性是list/tuple第几位的属性&am…

DEV--C++小游戏(吃星星(0.2))

目录 吃星星&#xff08;0.2&#xff09; 简介 分部代码 头文件&#xff08;增&#xff09; 命名空间变量&#xff08;增&#xff09; 副函数&#xff08;新&#xff0c;增&#xff09; 清屏函数 打印地图函数&#xff08;增&#xff09; 移动函数 选择颜色&#xff…

LuaJIT源码分析(三)字符串

LuaJIT源码分析&#xff08;三&#xff09;字符串 要表示一个字符串&#xff0c;核心就是需要知道字符串的长度&#xff0c;以及存放字符串具体数据的地址。lua的字符串是内化不可变的&#xff0c;也就是lua字符串变量存放的不是字符串的拷贝&#xff0c;而是字符串的引用。那么…

OpenNJet产品体验-手把手在Ubuntu20.04系统从零部署到应用OpenNJet

目录 一、引言 二、OpenNJet产品安装 2.1下载OpenNJet安装包 2.2安装OpenNJet V2.0.1 ​2.3快速启动并测试OpenNJet 三、OpenNJet产品应用体验 3.1配置OpenNJet 3.2 部署 Web 应用程序 3.3启动 NJet 3.4访问 Web 应用程序 四、总结 一、引言 OpenNJet应用引擎是高性…

代码随想录算法训练营DAY47|C++动态规划Part8|198.打家劫舍、213.打家劫舍II、198.打家劫舍III

文章目录 198.打家劫舍思路CPP代码 ⭐️213.打家劫舍II解决环的问题思路总结CPP代码 ⭐️198.打家劫舍III思路递归三部曲——确定参数和返回值递归三部曲——确定终止条件递归三部曲——确定单层遍历的逻辑 打印dp数组CPP代码暴力递归记忆化递归 198.打家劫舍 力扣题目链接 文章…

小米手机怎么截屏?一篇文章教会你!

我们经常需要截取手机屏幕上的内容&#xff0c;无论是为了分享、教学还是记录。对于小米手机用户来说&#xff0c;掌握截屏技巧不仅能够方便地记录精彩瞬间&#xff0c;还能在需要时轻松分享或保存屏幕内容。小米手机怎么截屏&#xff0c;有哪些截屏方式呢&#xff1f;本文将为…

Remix中使用 Tailwind

如何Remix 中使用 Tailwindcss Remix是通过 Vite 进行构建的&#xff0c;Vite 原生就支持 PostCSS&#xff0c;通过以下几步就可以设置完成 安装 PostCSS 插件 npm install -D tailwindcss autoprefixer添加PostCSS配置文件 ## postcss.config.js export default {plugins:…

深度学习网络:设计、开发和部署

​书籍&#xff1a;Deep Learning Networks: Design, Development and Deployment 作者&#xff1a;Jayakumar Singaram&#xff0c;S. S. Iyengar&#xff0c;Azad M. Madni 出版&#xff1a;Springer书籍下载-《​深度学习网络&#xff1a;设计、开发和部署》该教材为学生和工…

cesium雷达遮罩(轨迹球效果)

cesium 雷达遮罩(轨迹球效果) 以下为源码直接复制可用 1、实现思路 通过修改“material”材质来实现轨迹球效果 2、代码示例 2.1 index.html <!DOCTYPE html> <html lang="en"><head><!

【刷题篇】双指针(二)

文章目录 1、有效三角形的个数2、查找总价格为目标值的两个商品3、三数之和4、四数之和 1、有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 class Solution { public:int triangleNumber(vector<int>& n…

u盘数据突然不见了怎么回事 u盘数据为什么无故不见如何恢复

当我们把文档资料保存好并复制到U盘后&#xff0c;发现刚才保存的资料没了&#xff0c;并且连文档都不见了&#xff0c;不过文件夹还在U盘。那么U盘数据突然不见了怎么回事呢?U盘数据突然不见了怎么办? 一、U盘数据突然不见了怎么回事 有许多原因可能导致u盘数据无故消失&a…

伪装目标检测论文阅读之Dual-SAM(CVPR-2024)

论文&#xff1a;link code&#xff1a;code Fantastic Animals and Where to Find Them:Segment Any Marine Animal with Dual SAM 摘要 作为水下智能的重要支柱&#xff0c;海洋动物分割(MAS)涉及对海洋环境中的动物进行分割。以往的方法在提取长范围上下文特征方面表现不佳…

内存卡突然罢工?数据恢复有高招!

内存卡作为我们日常生活中常见的存储设备&#xff0c;广泛应用于手机、相机等设备中。然而&#xff0c;有时我们会遇到内存卡损坏打不开的情况&#xff0c;这时该如何应对呢&#xff1f;本文将为您详细解析内存卡损坏的原因&#xff0c;并提供有效的数据恢复方案&#xff0c;帮…

PyQt5的基本安装与使用

文章目录 1. 简介2.安装2.1.QtDisigner配置2.2 PyUIC配置2.3. PyRCC配置 3. 一个简单的PyQt5使用示例 1. 简介 PyQt5是一个用于创建交互式界面的Python库&#xff0c;它是基于Qt框架的Python绑定。Qt是一个跨平台的C框架&#xff0c;用于开发图形用户界面&#xff08;GUI&…

4.26.7具有超级令牌采样功能的 Vision Transformer

Vision Transformer在捕获浅层的局部特征时可能会受到高冗余的影响。 在神经网络的早期阶段获得高效且有效的全局上下文建模&#xff1a; ①从超像素的设计中汲取灵感&#xff0c;减少了后续处理中图像基元的数量&#xff0c;并将超级令牌引入到Vision Transformer中。 超像素…

源代码加密的重要性

在数字化时代&#xff0c;企业面临的最大挑战之一是如何保护其核心数据不被泄露。企业源代码防泄密是指企业采取措施保护其软件或应用程序源代码不被未授权的人员获取、泄露或盗用的一种安全措施。源代码是软件的核心组成部分&#xff0c;其中包含了程序员编写的具体指令和算法…

MySQL深入理解MVCC机制(详解)

深入理解MVCC 1、MVCC定义 MVCC:Multi-Version Concurrency Control&#xff0c;多版本并发控制机制。 在mysql中&#xff0c;为了满足事务的四大特性之一的隔离性&#xff0c;就是当前事务中的查询的数据不受其他事务的增删改操作的影响&#xff0c;因此mysql主要是通过这个…

怎么解决端口被占用

目录 一、引言 二、解决方法 一、引言 最近用vscode写网页&#xff0c;老是遇见端口被占用&#xff0c;报错如下&#xff1a; listen tcp :8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 二、解决方法 1.换…

Apache DolphinScheduler 3.3.0 版本重磅更新提前看!

Apache DolphinScheduler 3.3.0版本终于要在万众期待中发布啦&#xff01;本次发版将有重大功能更新&#xff0c;包括架构上的调整。 为了让广大用户提前尝鲜&#xff0c;社区特别准备了直播活动提前揭秘3.3.0版本中的重要更新&#xff0c;到时候你将会了解到这些信息&#xf…
最新文章