当前位置: 首页 > 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…...

解密MAA:如何用计算机视觉技术解放明日方舟玩家的双手?

解密MAA&#xff1a;如何用计算机视觉技术解放明日方舟玩家的双手&#xff1f; 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址:…...

【Java面试必看】深度剖析 HashMap 的底层实现、扩容机制与线程安全隐患

【Java面试必看】深度剖析 HashMap 的底层实现、扩容机制与线程安全隐患 引言 在 Java 开发中&#xff0c;HashMap 是使用频率最高的集合类之一。由于其高效的查找性能&#xff0c;面试官非常喜欢围绕其底层实现细节进行提问。本文将从数据结构、核心方法、扩容机制以及并发问题…...

从LVDS接口到Ultrascale SelectIO:IDDRE1与ODDRE1原语的实战仿真解析

1. 从LVDS到Ultrascale SelectIO&#xff1a;为什么需要IDDRE1和ODDRE1&#xff1f; 第一次接触Xilinx Ultrascale系列FPGA的SelectIO资源时&#xff0c;我被官方文档里密密麻麻的原语列表搞得头晕眼花。直到项目逼着我必须实现一个800Mbps的LVDS接收接口&#xff0c;才真正静下…...

从零到一:基于mmdetection-3.1.0与RTMDet-Ins-m的自定义数据集实例分割实战

1. 环境准备与mmdetection安装 第一次接触mmdetection框架时&#xff0c;我也被它复杂的依赖关系搞晕过。不过跟着官方文档一步步操作&#xff0c;其实半小时就能搞定。这里分享几个避坑经验&#xff1a;建议使用conda创建虚拟环境&#xff0c;python版本选择3.8最稳妥&#xf…...

【凌晨2点被攻破的AI生成接口】:一个未校验的正则表达式如何引发RCE——生成代码安全检查黄金48小时响应协议

第一章&#xff1a;智能代码生成代码安全性检查 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成工具&#xff08;如Copilot、CodeWhisperer、Tabnine&#xff09;在提升开发效率的同时&#xff0c;可能引入未经验证的安全隐患——包括硬编码密钥、不安全的反序列化…...

多特征融合下的随机森林遥感影像智能解译

1. 多特征融合为什么能提升遥感影像解译效果 我第一次接触遥感影像分类时&#xff0c;发现单纯用原始波段数据效果总是不理想。后来才明白&#xff0c;就像做菜需要各种调料搭配一样&#xff0c;遥感影像解译也需要多种特征"调味"。多特征融合的核心思路&#xff0c;…...

如何找回红米手机上已删除的短信【3个简单方法】

丢失重要短信可能会令人沮丧&#xff0c;这是许多智能手机用户&#xff08;包括使用 Redmi 设备的用户&#xff09;面临的问题。无论消息是被错误删除、由于系统错误还是由于电话故障而丢失&#xff0c;无法访问关键对话、联系人或交易记录都可能令人痛苦。如果您想知道如何在 …...

Kylin-V10 arm 环境下 virt-manager 的安装与配置指南

1. Kylin-V10 arm环境简介与准备工作 Kylin-V10作为国产操作系统的代表&#xff0c;在arm架构设备上表现出色。我最近在飞腾2000芯片的服务器上部署时&#xff0c;发现很多朋友对虚拟化管理工具virt-manager的安装存在困惑。arm架构与传统x86环境最大的区别在于软件包依赖和硬…...

【智能代码生成×知识图谱融合实战指南】:20年架构师亲授3大落地场景与5个避坑红线

第一章&#xff1a;智能代码生成与知识图谱融合的底层逻辑 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成并非孤立的语言建模任务&#xff0c;其深层驱动力在于对软件工程知识结构的显式建模与动态推理。知识图谱作为结构化、语义化、可演化的知识容器&#xff…...

加固后应用闪退、卡顿、体积暴增?手把手教你问题排查与解决

“加固完一打包&#xff0c;应用闪退了。”“启动速度慢了2秒&#xff0c;用户要骂娘了。”“加固后APK体积翻了一倍&#xff0c;这可怎么发&#xff1f;”这些都是开发者接入APK加固平台后最常遇到的“并发症”。当这些问题发生时&#xff0c;第一反应往往是怀疑加固方案本身有…...