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整理)
参考资料:
- React+TS最佳实践指南 1
- 2025 React开发路线图 3
- 后台系统TS实战 4
- PWA现代应用开发 6
- TypeScript高级技巧 5
(注:实际开发中请以各工具官方文档为准,文中代码示例均通过TypeScript 5.4验证)
相关文章:
React + TypeScript 全栈开发最佳实践
React TypeScript 全栈开发最佳实践 一、环境搭建与项目初始化 node.js和npm的安装请参考我的文章。 1.1 脚手架选择与工程创建 # 使用Vite 5.x创建ReactTS项目(2025年主流方案) npx create-vitelatest my-app --template react-ts cd my-app npm in…...
springboot志同道合交友网站设计与实现(代码+数据库+LW)
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本志同道合交友网站就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信…...
防火墙双机热备---VRRP,VGMP,HRP(超详细)
双机热备技术-----VRRP,VGMP,HRP三个组成 注:与路由器VRRP有所不同,路由器是通过控制开销值控制数据包流通方向 防火墙双机热备: 1.主备备份模式 双机热备最大的特点就是防火墙提供了一条专门的备份通道(心…...
MQTT实现智能家居------4、在Linux上运行MQTT
进入主目录,创建一个MQTT文件夹 cd ~ mkdir MQTT 用FileZilla连接开发板,将我发布的压缩包解压以后放进MQTT 安装cmake sudo apt-get install cmake g编译 & 运行 echo sudo apt-get update >> build.sh #向build.sh文件写入内容 chmod…...
VMware建立linux虚拟机
本文适用于初学者,帮助初学者学习如何创建虚拟机,了解在创建过程中各个选项的含义。 环境如下: CentOS版本: CentOS 7.9(2009) 软件: VMware Workstation 17 Pro 17.5.0 build-22583795 1.配…...
大模型文集开篇稿
2023年,我国AI大模型行业规模已达到147亿元人民币(前瞻产业研究院 数据)。AI大模型的行业应用及技术进步能有效提升各行业生产要素的产出效率并提高了数据要素在生产要素组合中的地位。供给方面,当前AI大模型企业主要通过深化通用…...
python pickle模块
pickle 是 Python 的一个标准模块,它实现了基本的二进制协议,用于对象的序列化和反序列化。序列化是指将对象转换为字节流的过程,这样对象就可以被保存到文件中或通过网络传输。反序列化是指将字节流转换回对象的过程。 使用 pickle 序列化对…...
第16届蓝桥杯模拟赛3 python组个人题解
第16届蓝桥杯模拟赛3 python组 思路和答案不保证正确 1.填空 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问, 2024 的最大的质因数是多少? 因为是填空题,所以直接枚举2023~2 &am…...
企业知识管理战略整合新路径
跨部门知识协同机制 现代企业知识管理的核心挑战在于突破组织孤岛效应,跨部门知识协同机制的构建需依托结构化流程与智能化工具的融合。通过建立标准化知识元数据体系,企业可实现文档分类、版本控制及权限管理的统一规范,其中Baklib作为云端…...
GO 快速升级Go版本
由于底层依赖升级了,那我们也要跟着升,go老版本已经不足满足需求了,必须要将版本升级到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中,所有资源对象都是通过API进行操作,他们保存在etcd里。而对etcd的操作我们需要通过访问kube-apiserver来实现,上面的Service Account其实就是APIServer的认证过程,而授权的机制是通过RBA…...
搜广推校招面经三十一
vivo策略算法 一、机器学习中 L1 和 L2 正则化的原理 见【搜广推校招面经二十五】 L1 正则化将某些特征权重置0实现模型简化,而 L2 正则化主要通过平滑权重来实现模型简化。 1.1. 正则化的原理 正则化的核心思想是在损失函数中加入一个惩罚项(Regula…...
【JavaWeb13】了解ES6的核心特性,对于提高JavaScript编程效率有哪些潜在影响?
文章目录 🌍一. ES6 新特性❄️1. ES6 基本介绍❄️2. 基本使用2.1 let 声明变量2.2 const 声明常量/只读变量2.3 解构赋值2.4 模板字符串2.5 对象拓展运算符2.6 箭头函数 🌍二. Promise❄️1. 基本使用❄️2. 如何解决回调地狱问题2.1回调地狱问题2.2 使…...
C++知识整理day9——继承(基类与派生类之间的转换、派生类的默认成员函数、多继承问题)
文章目录 1.继承的概念和定义2.基类与派生类之间的转换3.继承中的作用域4.派生类的默认成员函数5.实现一个不能被继承的类6.继承与友元7.继承与静态成员8.多继承和菱形继承问题8.1 继承分类及菱形继承8.2 虚继承 1.继承的概念和定义 概念: 继承(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,使用kali的openssl(自带),执行以下命令。 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的基本特性和应用,然后详细讲解了汉字点阵生成的方法,并提供了完整的代码示例,包括初始化、清屏、字符串显示和自定义汉字显示函数。这些代码实现了在STM32F…...
动态表头导出EasyExcel
在 Spring Boot 中结合 EasyExcel 实现动态表头导出(无实体类,表头和字段(前端传表名,字段值动态查询,返回List<Map<String,Object>>)由前端传递)可以通过以下步骤实现。以下是完整…...
【前端】react+ts 轮播图的实现
一、场景描述 在很多网站的页面中都有轮播图,所以我想利用react.js和ts实现一个轮播图。自动轮播图已经在前面实现过了,如:https://blog.csdn.net/weixin_43872912/article/details/145622444?sharetypeblogdetail&sharerId145622444&a…...
清华大学出品DeepSeek 四部教程全收录(附下载包),清华deepseek文档下载地址
文章目录 前言一、清华大学deepseek教程(四部)二、清华大学deepseek教程全集1.清华大学第一版《DeepSeek:从入门到精通》2.清华大学第二版《DeepSeek赋能职场》3.清华大学第三版《普通人如何抓住DeepSeek红利》4.清华大学第四版:D…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
