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创建路由两种方式 的相关文章

随机推荐

  • 说说一次 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