当前位置: 首页 > news >正文

React + TypeScript 全栈开发最佳实践

React + TypeScript 全栈开发最佳实践


一、环境搭建与项目初始化

node.js和npm的安装请参考我的文章。

1.1 脚手架选择与工程创建
# 使用Vite 5.x创建React+TS项目(2025年主流方案)
npx create-vite@latest my-app --template react-ts
cd my-app
npm install

关键特性

  • 零配置TS支持(默认集成TypeScript 5.4)35
  • 闪电级HMR(毫秒级热更新)
  • 内置SSR/SSG支持
1.2 项目结构优化
src/
├─ assets/            # 静态资源
├─ components/        # 通用组件
├─ hooks/             # 自定义Hooks
├─ types/             # 全局类型定义
├─ utils/             # 工具函数
├─ pages/             # 页面组件(Next.js风格)
├─ store/             # 状态管理
└─ App.tsx            # 根组件

最佳实践

  • 使用绝对路径别名(配置vite.config.ts)
// vite.config.ts
export default defineConfig({resolve: {alias: {'@': path.resolve(__dirname, './src')}}
})

二、类型安全核心实践
2.1 组件Props类型定义
// 使用接口定义组件Props
interface ButtonProps {variant: 'primary' | 'secondary' | 'danger'  // 字面量联合类型size?: 'sm' | 'md' | 'lg'                   // 可选属性children: React.ReactNode
}const Button: React.FC<ButtonProps> = ({ variant, size = 'md', children }) => (<button className={`btn-${variant} ${size}`}>{children}</button>
)
2.2 高级类型应用
// 泛型组件示例(表格组件)
interface TableColumn<T> {key: keyof Theader: stringrender?: (value: T[keyof T]) => React.ReactNode
}function DataTable<T>({ data, columns }: { data: T[]; columns: TableColumn<T>[] }) {return (<table><thead>{/* 表头渲染 */}</thead><tbody>{/* 数据渲染 */}</tbody></table>)
}

技巧

  • 使用keyof实现类型安全字段访问114
  • 通过泛型实现组件复用25

三、状态管理最佳实践
3.1 Redux Toolkit方案
// store/slices/userSlice.ts
import { createSlice, PayloadAction } from '@reduxjs/toolkit'interface UserState {name: string | nullpermissions: ('read' | 'write')[]  // 精确字面量类型
}const initialState: UserState = { name: null,permissions: []
}export const userSlice = createSlice({name: 'user',initialState,reducers: {setUser: (state, action: PayloadAction<Pick<UserState, 'name'>>) => {state.name = action.payload.name}}
})
3.2 React Query数据请求
// 带TS类型的API请求封装
type Todo = {id: numbertitle: stringcompleted: boolean
}function TodoList() {const { data: todos } = useQuery<Todo[]>({queryKey: ['todos'],queryFn: () => fetch('/api/todos').then(res => res.json())})return (<ul>{todos?.map(todo => (<li key={todo.id}>{todo.title}</li>))}</ul>)
}

异常处理

  • 使用@tanstack/react-query的错误边界
  • 配置全局错误处理46

四、性能优化关键策略
4.1 代码分割与懒加载
// 动态导入组件(Next.js风格)
const UserProfile = React.lazy(() => import('@/components/UserProfile'))function Dashboard() {return (<React.Suspense fallback={<Spinner />}><UserProfile userId="123" /></React.Suspense>)
}

优化效果

  • 首屏体积减少40%+35
4.2 记忆化优化
const ExpensiveComponent = React.memo(({ list }: { list: Item[] }) => (<div>{/* 复杂计算 */}</div>
))function Parent() {const list = useMemo(() => generateList(), [])return <ExpensiveComponent list={list} />
}

注意事项

  • 避免滥用useMemo造成维护成本上升45

五、异常场景解决方案
5.1 TS类型错误诊断

常见问题:第三方库类型缺失

# 安装DefinitelyTyped类型声明
npm install @types/react-transition-group --save-dev

调试技巧

  • 使用tsc --noEmit预检查类型16
  • 配置ESLint类型检查规则35
5.2 构建优化异常

场景:生产构建时内存溢出

// package.json
{"scripts": {"build": "NODE_OPTIONS=--max-old-space-size=4096 vite build"}
}

进阶方案

  • 配置Vite的chunk分割策略46

六、部署与监控方案
6.1 PWA集成(2025主流方案)
// 注册Service Worker
if ('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('/sw.js')})
}

关键配置

  • 使用Workbox实现智能缓存6
  • Lighthouse性能评分提升至90+6
6.2 错误监控
// 全局错误边界
import * as Sentry from '@sentry/react'<Sentry.ErrorBoundary fallback={<ErrorPage />}><App />
</Sentry.ErrorBoundary>

监控指标

  • JS错误捕获率提升至98%46

七、完整开发流程图解
项目初始化
类型系统设计
组件开发
状态管理
性能优化
测试验证
部署上线

(图片来源:搜索结果35整理)


参考资料

  1. React+TS最佳实践指南 1
  2. 2025 React开发路线图 3
  3. 后台系统TS实战 4
  4. PWA现代应用开发 6
  5. TypeScript高级技巧 5

(注:实际开发中请以各工具官方文档为准,文中代码示例均通过TypeScript 5.4验证)

相关文章:

React + TypeScript 全栈开发最佳实践

React TypeScript 全栈开发最佳实践 一、环境搭建与项目初始化 node.js和npm的安装请参考我的文章。 1.1 脚手架选择与工程创建 # 使用Vite 5.x创建ReactTS项目&#xff08;2025年主流方案&#xff09; npx create-vitelatest my-app --template react-ts cd my-app npm in…...

springboot志同道合交友网站设计与实现(代码+数据库+LW)

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本志同道合交友网站就是在这样的大环境下诞生&#xff0c;其可以帮助使用者在短时间内处理完毕庞大的数据信…...

防火墙双机热备---VRRP,VGMP,HRP(超详细)

双机热备技术-----VRRP&#xff0c;VGMP&#xff0c;HRP三个组成 注&#xff1a;与路由器VRRP有所不同&#xff0c;路由器是通过控制开销值控制数据包流通方向 防火墙双机热备&#xff1a; 1.主备备份模式 双机热备最大的特点就是防火墙提供了一条专门的备份通道&#xff08;心…...

MQTT实现智能家居------4、在Linux上运行MQTT

进入主目录&#xff0c;创建一个MQTT文件夹 cd ~ mkdir MQTT 用FileZilla连接开发板&#xff0c;将我发布的压缩包解压以后放进MQTT 安装cmake sudo apt-get install cmake g编译 & 运行 echo sudo apt-get update >> build.sh #向build.sh文件写入内容 chmod…...

VMware建立linux虚拟机

本文适用于初学者&#xff0c;帮助初学者学习如何创建虚拟机&#xff0c;了解在创建过程中各个选项的含义。 环境如下&#xff1a; CentOS版本&#xff1a; CentOS 7.9&#xff08;2009&#xff09; 软件&#xff1a; VMware Workstation 17 Pro 17.5.0 build-22583795 1.配…...

大模型文集开篇稿

2023年&#xff0c;我国AI大模型行业规模已达到147亿元人民币&#xff08;前瞻产业研究院 数据&#xff09;。AI大模型的行业应用及技术进步能有效提升各行业生产要素的产出效率并提高了数据要素在生产要素组合中的地位。供给方面&#xff0c;当前AI大模型企业主要通过深化通用…...

python pickle模块

pickle 是 Python 的一个标准模块&#xff0c;它实现了基本的二进制协议&#xff0c;用于对象的序列化和反序列化。序列化是指将对象转换为字节流的过程&#xff0c;这样对象就可以被保存到文件中或通过网络传输。反序列化是指将字节流转换回对象的过程。 使用 pickle 序列化对…...

第16届蓝桥杯模拟赛3 python组个人题解

第16届蓝桥杯模拟赛3 python组 思路和答案不保证正确 1.填空 如果一个数 p 是个质数&#xff0c;同时又是整数 a 的约数&#xff0c;则 p 称为 a 的一个质因数。 请问&#xff0c; 2024 的最大的质因数是多少&#xff1f; 因为是填空题&#xff0c;所以直接枚举2023~2 &am…...

企业知识管理战略整合新路径

跨部门知识协同机制 现代企业知识管理的核心挑战在于突破组织孤岛效应&#xff0c;跨部门知识协同机制的构建需依托结构化流程与智能化工具的融合。通过建立标准化知识元数据体系&#xff0c;企业可实现文档分类、版本控制及权限管理的统一规范&#xff0c;其中Baklib作为云端…...

GO 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version [rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …...

RBAC授权

4 RBAC授权 4.1 什么是RBAC 在Kubernetes中&#xff0c;所有资源对象都是通过API进行操作&#xff0c;他们保存在etcd里。而对etcd的操作我们需要通过访问kube-apiserver来实现&#xff0c;上面的Service Account其实就是APIServer的认证过程&#xff0c;而授权的机制是通过RBA…...

搜广推校招面经三十一

vivo策略算法 一、机器学习中 L1 和 L2 正则化的原理 见【搜广推校招面经二十五】 L1 正则化将某些特征权重置0实现模型简化&#xff0c;而 L2 正则化主要通过平滑权重来实现模型简化。 1.1. 正则化的原理 正则化的核心思想是在损失函数中加入一个惩罚项&#xff08;Regula…...

【JavaWeb13】了解ES6的核心特性,对于提高JavaScript编程效率有哪些潜在影响?

文章目录 &#x1f30d;一. ES6 新特性❄️1. ES6 基本介绍❄️2. 基本使用2.1 let 声明变量2.2 const 声明常量/只读变量2.3 解构赋值2.4 模板字符串2.5 对象拓展运算符2.6 箭头函数 &#x1f30d;二. Promise❄️1. 基本使用❄️2. 如何解决回调地狱问题2.1回调地狱问题2.2 使…...

C++知识整理day9——继承(基类与派生类之间的转换、派生类的默认成员函数、多继承问题)

文章目录 1.继承的概念和定义2.基类与派生类之间的转换3.继承中的作用域4.派生类的默认成员函数5.实现一个不能被继承的类6.继承与友元7.继承与静态成员8.多继承和菱形继承问题8.1 继承分类及菱形继承8.2 虚继承 1.继承的概念和定义 概念&#xff1a; 继承(inheritance)机制是⾯…...

pyautogui库的screenshot()函数

# 方法一 screenshot pyautogui.screenshot() screenshot.save("screenshot.png")# 方法二 # 获取屏幕分辨率 screen_width, screen_height pyautogui.size()# 截取桌面屏幕 screenshot pyautogui.screenshot(region(0, 0, screen_width, screen_height)) screens…...

App测试--逍遥模拟器抓包问题

一、环境 逍遥模拟器、burp、adb、openssl(kali)。 二、配置 1.burp证书转换 下载证书 将burp证书复制进kali&#xff0c;使用kali的openssl(自带)&#xff0c;执行以下命令。 openssl x509 -inform der -in cacert.der -out burp.pem openssl x509 -subject_hash_old -in…...

STM32 HAL库0.96寸OLED显示液晶屏

本文介绍了使用STM32 HAL库通过I2C协议驱动0.96寸OLED显示屏的方法。首先概述了OLED的基本特性和应用&#xff0c;然后详细讲解了汉字点阵生成的方法&#xff0c;并提供了完整的代码示例&#xff0c;包括初始化、清屏、字符串显示和自定义汉字显示函数。这些代码实现了在STM32F…...

动态表头导出EasyExcel

在 Spring Boot 中结合 EasyExcel 实现动态表头导出&#xff08;无实体类&#xff0c;表头和字段&#xff08;前端传表名&#xff0c;字段值动态查询&#xff0c;返回List<Map<String,Object>>&#xff09;由前端传递&#xff09;可以通过以下步骤实现。以下是完整…...

【前端】react+ts 轮播图的实现

一、场景描述 在很多网站的页面中都有轮播图&#xff0c;所以我想利用react.js和ts实现一个轮播图。自动轮播图已经在前面实现过了&#xff0c;如&#xff1a;https://blog.csdn.net/weixin_43872912/article/details/145622444?sharetypeblogdetail&sharerId145622444&a…...

清华大学出品DeepSeek 四部教程全收录(附下载包),清华deepseek文档下载地址

文章目录 前言一、清华大学deepseek教程&#xff08;四部&#xff09;二、清华大学deepseek教程全集1.清华大学第一版《DeepSeek&#xff1a;从入门到精通》2.清华大学第二版《DeepSeek赋能职场》3.清华大学第三版《普通人如何抓住DeepSeek红利》4.清华大学第四版&#xff1a;D…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...