实现React18加TS,解决通用后台管理系统,实战方案落地有效实践经验

随着前端技术的不断发展和更新,使用React 18结合TypeScript(TS)来构建通用后台管理系统已成为一种常见的选择。本文将介绍如何在项目中应用React 18和TS,并分享一些实战方案的有效实践经验。

一、搭建React 18 + TS项目
首先,我们需要创建一个新的React 18 + TS项目。可以使用脚手架工具如Create React App或者Vite来快速搭建基础项目结构。

使用Create React App:

npx create-react-app my-admin --template typescript
cd my-admin

使用Vite:

npm init vite@latest my-admin --template react-ts
cd my-admin

二、组件开发与类型定义
在React 18 + TS项目中,组件的开发需要注意以下几点:

  1. 使用函数式组件:
import React from 'react';type Props = {name: string;
};const HelloWorld: React.FC<Props> = ({ name }) => {return <div>Hello, {name}!</div>;
};export default HelloWorld;

  1. 类型定义和传递:
import React from 'react';
import HelloWorld from './components/HelloWorld';type User = {id: number;name: string;
};const App: React.FC = () => {const user: User = {id: 1,name: 'John',};return (<div><HelloWorld name={user.name} /></div>);
};export default App;

三、路由和权限控制
在一个通用后台管理系统中,路由和权限控制是非常重要的。我们可以使用react-router-dom库来实现路由功能,结合TS的类型定义,可以更好地做到静态检查和减少潜在的错误。

  1. 安装并配置路由:
npm install react-router-dom @types/react-router-dom

import React from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import HomePage from './pages/HomePage';
import LoginPage from './pages/LoginPage';
import NotFoundPage from './pages/NotFoundPage';const App: React.FC = () => {return (<Router><Switch><Route exact path="/" component={HomePage} /><Route path="/login" component={LoginPage} /><Route component={NotFoundPage} /></Switch></Router>);
};export default App;

  1. 实现权限控制:
import React from 'react';
import { Redirect, Route, RouteProps } from 'react-router-dom';type PrivateRouteProps = {isAuthenticated: boolean;redirectPath: string;
} & RouteProps;const PrivateRoute: React.FC<PrivateRouteProps> = ({isAuthenticated,redirectPath,...rest
}) => {return isAuthenticated ? (<Route {...rest} />) : (<Redirect to={redirectPath} />);
};export default PrivateRoute;

四、状态管理与数据请求
在React 18 + TS项目中,状态管理一般使用Redux或者Mobx来实现。同时,数据请求可以使用axios等库来发送HTTP请求。

  1. 安装并配置Redux:
npm install redux react-redux @types/react-redux

  1. 创建Store:
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';const store = configureStore({reducer: {counter: counterReducer,},
});export default store;

  1. 发送数据请求:
import axios from 'axios';const fetchData = async (url: string): Promise<any> => {const response = await axios.get(url);return response.data;
};

以上是一个基于React 18和TypeScript的通用后台管理系统的实战方案。通过合理地搭建项目结构、定义类型、实现路由和权限控制以及进行状态管理和数据请求,我们可以高效地开发出

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

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

相关文章

CDH6.3.2安装

文章目录 [toc]一、CM简介1、ClouderaManager的概念2、ClouderaManager的功能3、ClouderaManager的架构 二、准备清单1、部署步骤2、集群规划3、软件环境准备 三、安装清单1、操作系统iso包2、JDK包3、MySQL包4、CM和CDH包5、部署ansible 四、基础环境准备1、配置网络2、配置ho…

MAC配置环境变量

1、配置 JAVA JDK 1.1、查看 JDK 安装目录 &#xff08;1&#xff09;可以在Android Studio中查看&#xff0c;复制该路径 &#xff08;2&#xff09;也可以在官网下载 Java JDK下载地址 mac中的安装地址是"资源库->Java->JavaVirtualMachines"中 1.2、…

【后端学前端】第一天 css动画 内凹导航栏

1、学习信息 css动画 内凹导航栏_哔哩哔哩_bilibili 随便找的的视频&#xff0c;主要原因是在公司不方便有声音 2、源码 最终源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title…

docker mysql8 设置不区分大小写

docker安装Mysql8.0的坑之lower_case_table_names_docker mysql lower_case_table_names-CSDN博客https://blog.csdn.net/p793049488/article/details/108365929 docker run ‐di ‐‐nametensquare_mysql ‐p 33306:3306 ‐e MYSQL_ROOT_PASSWORD123456 mysql

3D摄影棚布光:Set A Light 3D Studio

Set A Light 3D Studio是一款专业的灯光模拟软件&#xff0c;旨在帮助摄影师和电影制片人在电脑上进行虚拟灯光布置和场景模拟&#xff0c;以实现更加精准和高质量的拍摄效果。该软件提供了丰富的灯光和场景模型&#xff0c;支持灵活调整光源位置、强度、颜色和效果等参数&…

HTML行内元素和块级元素的区别? 分别有哪些?

目录 一、行内元素和块级元素的区别二、行内元素和块级元素分别有哪些1、行内元素2、块级元素 一、行内元素和块级元素的区别 1、行内元素不会占据整行&#xff0c;在一条直线上排列&#xff0c;都是同一行&#xff0c;水平方向排列&#xff1b;    2、块级元素可以包含行内…

win10脚本 | 使用 Word 自动化对象模型找出指定路径下含有特定内容的.docx

场景 今年的实验日志被我放在这样一个文件夹下&#xff0c;每个月下是每天具体的.docx文件&#xff0c;里面记录了我的一些实验操作步骤。现在我需要补充一个实验&#xff0c;用到一个名为chatunitest的插件&#xff0c;但是这是很久之前做的事情了&#xff0c;我无法判断是哪…

css的复合选择器(有案例)

目录 复合选择器的描述 后代选择器&#xff08;常用重点&#xff09; 子选择器 并集选择器&#xff08;重点常用&#xff09; 伪类选择器 链接伪类选择器 focus 伪类选择器 知识总结&#xff1a; 案例实现&#xff1a; 复合选择器的描述 在 CSS 中&#xff0c;可以根…

【UE5.1】Mixamo动画重定向到MetaHuman

前言 在上一篇博客&#xff08;【UE5】初识MetaHuman&#xff09;中我们创建一个MetaHuman角色&#xff0c;本篇博客在此基础上继续实现Mixamo动画重定向到MetaHuman角色的过程。 效果 步骤 1. 下载Mixamo动画资源&#xff08;网盘链接&#xff1a;百度网盘&#xff09;&…

56.windows docker 安装ES、Go操作ES

文章目录 一、环境准备1、 docker安装ES2、启动容器3、图像化客户端工具ElasticSearch-Head 二、Go ES连接与认证1、 连接ES2、配置ES认证 三、索引的增删改查四、文档的增删改创建单个文档根据文档id删除文档批量删除文档批量创建文档 五、文档查询列表查询精确匹配模糊匹配嵌…

[c++]—vector类___基础版(带你了解vector熟练掌握运用)

&#x1f469;&#x1f3fb;‍&#x1f4bb;作者:chlorine 目录 &#x1f393;标准库类型vector &#x1f393;定义和初始化vector的对象 &#x1f4bb;列表初始化vector对象 &#x1f4bb;创建指定数量的元素 &#x1f576;️值初始化 ❗列表初始化还是值初始化&#xf…

设计模式(二)-创建者模式(5)-建造者模式

一、为何需要建造者模式&#xff08;Builder&#xff09;? 在软件系统中&#xff0c;会存在一个复杂的对象&#xff0c;复杂在于该对象包含了很多不同的功能模块。该对象里的各个部分都是按照一定的算法组合起来的。 为了要使得复杂对象里的各个部分的独立性&#xff0c;以及…