react创建路由两种方式

2023-12-19

react创建路由两种方式

两种方式都需要下载相关依赖,依赖如下

npm i react-router-dom 

方式一,使用 useRoutes

使用 BrowserRouter 或者 HashRouter

index.tsx

import store from '@/store';
import 'bootstrap/dist/css/bootstrap.min.css';
import React from 'react';
import ReactDOM from 'react-dom/client';
import { Provider } from 'react-redux';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter ,HashRouter} from 'react-router-dom';

const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
root.render(
	<Provider store={store}>
		<React.StrictMode>
			<BrowserRouter >
				<App />
			</BrowserRouter>
		</React.StrictMode>
	</Provider>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

在这里插入图片描述

router 路由下,我这里使用的是路由的懒加载

import Loading from '@/components/loading';
import Layout from '@/views/layout';
import { lazy } from 'react';
import { RouteObject } from 'react-router-dom';

const Demo1 = lazy(() => import('@/views/demo1'));
const Demo2 = lazy(() => import('@/views/demo2'));
const Demo3 = lazy(() => import('@/views/demo3'));
const Demo4 = lazy(() => import('@/views/demo4'));
const Demo5 = lazy(() => import('@/views/demo5'));
const Demo6 = lazy(() => import('@/views/demo6'));
const Demo7 = lazy(() => import('@/views/demo7'));

const routes: RouteObject[] = [
	{
		path: '/',
		element: <Layout />,
		children: [
			{ path: 'demo1', element: <Demo1 />, errorElement: <Loading /> },
			{ path: 'demo2', element: <Demo2 />, errorElement: <Loading /> },
			{ path: 'demo3', element: <Demo3 />, errorElement: <Loading /> },
			{ path: 'demo4', element: <Demo4 />, errorElement: <Loading /> },
			{ path: 'demo5', element: <Demo5 />, errorElement: <Loading /> },
			{ path: 'demo6', element: <Demo6 />, errorElement: <Loading /> },
			{ path: 'demo7', element: <Demo7 />, errorElement: <Loading /> },
		],
	},
];
export default routes;

之后在 App.tsx 中进行渲染,需要使用 useRoutes

import Loading from '@/components/loading';
import routes from '@/router/index';
import { Suspense } from 'react';
import { useRoutes } from 'react-router-dom';

function App() {
	return <Suspense fallback={<Loading />}>{useRoutes(routes)}</Suspense>;
}

export default App;

方式二,使用 RouterProvider

index.tsx 中需要删除 BrowserRouter 如果没有则不需要操作

import store from '@/store';
import 'bootstrap/dist/css/bootstrap.min.css';
import React from 'react';
import ReactDOM from 'react-dom/client';
import { Provider } from 'react-redux';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
root.render(
	<Provider store={store}>
		<React.StrictMode>
			<App />
		</React.StrictMode>
	</Provider>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

在这里插入图片描述

创建 router/index.tsx ,注意里面使用的是 createBrowserRouter 或者可以创建哈希路由 createHashRouter

import Loading from '@/components/loading';
import Layout from '@/views/layout';
import { lazy } from 'react';
import { createBrowserRouter } from 'react-router-dom';

const Demo1 = lazy(() => import('@/views/demo1'));
const Demo2 = lazy(() => import('@/views/demo2'));
const Demo3 = lazy(() => import('@/views/demo3'));
const Demo4 = lazy(() => import('@/views/demo4'));
const Demo5 = lazy(() => import('@/views/demo5'));
const Demo6 = lazy(() => import('@/views/demo6'));
const Demo7 = lazy(() => import('@/views/demo7'));

const routes = createBrowserRouter([
	{
		path: '/',
		element: <Layout />,
		children: [
			{ path: 'demo1', element: <Demo1 />, errorElement: <Loading /> },
			{ path: 'demo2', element: <Demo2 />, errorElement: <Loading /> },
			{ path: 'demo3', element: <Demo3 />, errorElement: <Loading /> },
			{ path: 'demo4', element: <Demo4 />, errorElement: <Loading /> },
			{ path: 'demo5', element: <Demo5 />, errorElement: <Loading /> },
			{ path: 'demo6', element: <Demo6 />, errorElement: <Loading /> },
			{ path: 'demo7', element: <Demo7 />, errorElement: <Loading /> },
		],
	},
]);
export default routes;

在这里插入图片描述

App.tsx 中引入 RouterProvider router.tsx 引入

import Loading from '@/components/loading';
import routes from '@/router/index';
import { Suspense } from 'react';
import { RouterProvider } from 'react-router-dom';

function App() {
	return (
		<Suspense fallback={<Loading />}>
			<RouterProvider router={routes} />
		</Suspense>
	);
}

export default App;

在这里插入图片描述

效果实现都是这样的

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react创建路由两种方式 的相关文章

  • 使用画布元素作为文本区域

    我正在寻找有关如何使用类似于文本区域的画布元素的直接描述 我见过这样的项目Ace http ace ajax org 只是想知道如何像文本区域一样写入该区域 只是纯文本 没有什么花哨的 提前致谢 Ace 曾经是 Mozilla Skywri
  • 1分30秒倒计时器javascript

    我有代码 但它适用于 2 分钟计时器 我需要将其修改为 1 分 30 秒计时器 我已经尝试过 但未能从 1 30 开始计时器 因为我是这一行的初学者 并且想学习如何做到这一点 这是代码 div div
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • 在 angularjs 模块初始化期间有条件地注入依赖项

    我有一个角度模块 我想有条件地将依赖项注入其中 IE var myapp angular module myapp ngRoute myappcontroller ngGrid I want to include ngGrid only i
  • Disqus 评论数始终为 0 条评论

    我想我已经按照通用代码的说明设置了 Disqus 问题是它总是说某个帖子有 0 条评论 拿这个帖子来说 http tx0rx0 com retropie and the raspberry pi http tx0rx0 com retrop
  • Vue Draggable - 如何仅替换所选项目以防止移动网格上的所有其他项目?

    这是一个要测试的示例 https codesandbox io s j4vn761455 file src App vue 112 116 https codesandbox io s j4vn761455 file src App vue
  • Famo.us 滚动视图高度

    我正在尝试使用著名的顺序布局在滚动视图下方添加图像 但滚动视图的高度有问题 这就是我创建滚动视图的方式 var scrollview new Scrollview direction Utility Direction X options
  • 使用 jQuery/JavaScript 将文本框值复制到剪贴板

    我有一个文本框和按钮 如下所示 div class col xs 11 style padding 20px 0 div
  • 属性访问器(getter)的扩展运算符问题

    我很难理解为什么以下代码存在一些问题https jsfiddle net q4w6e3n3 3 https jsfiddle net q4w6e3n3 3 Note 所有示例均在 chrome 版本 52 0 2743 116 中进行测试
  • 添加选项以选择框而不用 Internet Explorer 关闭该框?

    我正在尝试构建一个包含多个下拉选择框的网页 这些下拉选择框在首次打开时异步加载其选项 这在 Firefox 下工作得很好 但在 Internet Explorer 下则不然 下面是我想要实现的目标的一个小例子 基本上 有一个选择框 ID 为
  • 全局未在 ../node_modules/socket.io-parser/is-buffer.js 中定义

    预先感谢您帮助我 我正在尝试在我的一个角度组件中连接套接字 但在浏览器的控制台中它会抛出一个错误 指出 Global 未在 Object node modules socket io parser is buffer js 中定义 这是我的
  • 使用 javascript 调整图像大小以在画布 createPattern 中使用

    我见过一些关于如何调整图像大小的技巧 在 IMG 标签内使用 但我想在里面有一个图像变量 一个 Javascript 调整它的大小 然后使用 a 中的图像 context createPattern 图像 重复 我还没有找到任何提示 关于如
  • D3.js - 具有多个环的圆环图

    以下示例显示了 D3 js 中的圆环图 是否可以向图表添加多个圆环 var dataset apples 53245 28479 19697 24037 40245 var width 460 height 300 radius Math
  • 不可见的 reCAPTCHA - 缺少必需的参数:sitekey

    我正在为每个带有具有类的按钮的表单动态加载不可见的 reCAPTCHAg recaptcha 我遇到的问题是验证码未正确加载 我不知道为什么 我按照验证码网站上的文档进行操作 但我不确定如何以及为什么会出现此错误 Uncaught Erro
  • d3力定向布局-链接距离优先

    在 d3 中使用力导向布局 如何使链接距离成为优先事项 同时仍然保持良好的图形布局 如果我指定动态链接距离 但保留默认费用 则我的图形距离会因费用函数而发生一些变形 并且不再是准确的距离 但是 如果我删除电荷 图表将如下所示 任何建议表示赞
  • 从未使用 mimeType 初始化的 MediaRecorder 获取 mimeType

    我正在使用 MediaRecorder API 在页面上录制一些媒体 在我的 MediaRecorder 初始化中 我没有指定内容类型 因为我不需要任何特别的内容 浏览器可以选择它想要的 var mediaRecorder new Medi
  • 在多个数组中搜索字符串,然后设置 var - jQuery

    我正在寻找基于字符串存在于哪个数组中设置一个变量 例如 var primary red blue yellow var secondary orange purple green 然后检查 purple 并返回它在 secondary 数组
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles

随机推荐

  • 说说一次 Dubbo 服务请求流程?

    Dubbo 是一个高性能 轻量级的开源 Java RPC 框架 用于构建服务化应用程序 下面是一个简单的 Dubbo 服务请求流程 客户端发起请求 客户端通过 Dubbo 提供的 RPC 客户端库发送请求到 Dubbo 服务提供者 请求包含
  • 基于SpringBoot+Vue的中山社区医疗综合服务平台设计实现(源码+lw+部署文档+讲解等)

    文章目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的
  • 智慧排水检测系统,提升城市生命线管理效率

    随着城市化的快速发展 排水系统作为城市生命线的重要组成部分 其管理和维护对于城市的正常运行至关重要 传统的排水系统监测方法往往依赖人工巡查和定期的设备检查 存在效率低下 易出错等问题 为了解决这些问题 智慧排水监测系统应运而生 本文将详细介
  • Vue 条件渲染 v-if

    v if 指令 用于控制元素的显示或隐藏 执行条件 当条件为 false 时 会将元素从 DOM 中删除 应用场景 适用于显示隐藏切换频率较低的场景 语法格式 div 内容 div 基础用法
  • ISO认证的意义以及费用

    ISO认证是国际标准化组织制定的一套标准体系 它对于企业来说具有重要的意义 ISO认证可以帮助企业提高管理水平 提升产品品质 增强市场竞争力 同时也是企业拓展市场 开拓客户的重要手段 一 ISO认证的意义 ISO认证具有以下几个方面的意义
  • ExperimentalWarning: The http2 module is an experimental API.

    错误提示 Node js ExperimentalWarning The fs promises API is experimental 原因是node的版本不是最新的 而在项目引入的模块是最新的 node js的版本低于模块的版本 解决方
  • 一键证件照换底色软件哪个好?这款让你的证件照独具特色!

    在我们生活中 有很多时候需要用到证件照 无论是报名考试还是申请签证 都需要提供一张规格标准的证件照片 然而 有时候我们拍摄的照片可能存在一些问题 比如背景色不符合要求 这时候 如果有一款一键证件照换底色软件 就能够轻松解决这个问题了 首先
  • 基于单片机设计的电子指南针(LSM303DLH模块(三轴磁场 + 三轴加速度)

    一 前言 本项目是基于单片机设计的电子指南针 主要利用STC89C52作为主控芯片和LSM303DLH模块作为指南针模块 通过LCD1602液晶显示屏来展示检测到的指南针信息 在日常生活中 指南针是一种非常实用的工具 可以帮助我们确定方向
  • C# Tcplistener,Tcp服务端简易封装

    文章目录 前言 相关文章 前言 设计 代码 简单使用 运行结果 前言 我最近有个需求要写Tcp服务端 我发现Tcp服务端的回调函数比较麻烦 简化Tcp的服务 我打算自己封装一个简单的Tcp服务端 相关文章 C TCP应用编程三 异步TCP应
  • 超级好用的SQL语句大全

    文章目录 一 DDL Data Definition Language 数据定义语言 1 操作库 2 操作表 二 DML Data Manipulation Language 数据操作语言 1 增加 insert into 2 删除 del
  • 如何利用 Kubernetes 的新 CronJob API 进行高效的任务调度

    Kubernetes 的 CronJob API 是在云原生环境中自动执行常规任务的关键功能 本指南不仅引导您完成使用此 API 的步骤 还说明了它非常有用的实际用例 先决条件 正在运行的 Kubernetes 集群 版本 1 21 或更高
  • MySQL数据库:为什么它是您的最佳选择?

    MySQL是一个关系型数据库管理系统 由瑞典MySQL AB公司开发 目前属于Oracle旗下产品 MySQL是最流行的关系型数据库管理系统之一 在WEB应用方面 MySQL是最好的RDBMS Relational Database Man
  • Linux中使用HTTP协议进行API交互的示例——你的“API小伙伴”

    大家好 今天我们要聊聊在Linux中如何使用HTTP协议进行API交互 听起来有点高大上 但其实并不难 让我们一起来看看 首先 我们需要了解什么是API API 全名为应用程序接口 Application Programming Inter
  • Android开发,使用kotlin学习多媒体功能(详细)

    一 通知 1 用到的类和方法 1 Context类 getSystemService 接收一个字符串参数用于确定获取系统的哪个服务 这里我们传入Context NOTIFICATION SERVICE 获取NotificationManag
  • 由于人工智能和自动化,2030 年将不存在的 6 个科技工作岗位

    我们都知道人工智能和自动化已经存在 并且有很多关于它们将如何扰乱日常业务实践以及支撑它们的专业角色的讨论 虽然预测某些工作岗位将彻底消失似乎很戏剧性 但对未来可能发生的情况保持现实态度是明智的 以便为接下来发生的事情做好准备 因此 考虑到这
  • VScode配置mingw C语言环境变量

    C语言IDE VScode VScode是个人比较喜欢的一款IDE软件 鄙人曾同时在VScode软件中运行三个终端 开发Python Golang和C语言 下载地址如下 code visualstudio com VScode配置mingw
  • 独孤思维:年底新项目,8年陪伴共同成长

    没赚到钱的人 为了证明自己的能力和与众不同 他们都会通过不断消费来包装自己 满足自己 感觉好像自己很有钱很牛b 其实都不是自己的钱 也都没有能力去赚钱 本质上 就是满足自己的虚荣心 企图让别人觉得 自己很牛 但是 你让他干个稍微有点技术含量
  • 【Android】百度地图 获取开发密钥,创建应用(保姆级教程)

    进入百度网址 网址 百度地图开放平台 百度地图API SDK 地图开发 baidu com 登录百度账号 进入官网控制台 点击 应用管理 gt 我的应用 gt 创建应用 在创建应用里 应用类型选择Android SDK 接下来 我们要获取发
  • 从零开始学python必看,最强“Python编程三剑客(pdf)”,你值得拥有!

    从0开始学Python 就问你一句 慌不慌 说句实在的 慌 可能是因为你自己没有完整的规划 其实就是不知道从何下手 七七八八乱学一通自然还是觉得无厘头 但今天 我要跟你讲 莫慌 恰好前几天从朋友那得到一套最强 Python编程三剑客 Pyt
  • react创建路由两种方式

    react创建路由两种方式 两种方式都需要下载相关依赖 依赖如下 npm i react router dom 方式一 使用 useRoutes 使用 BrowserRouter 或者 HashRouter 在 index tsx 中 im