讲师中心 微信公众号
AI工具推荐 视频效率加速

React

Polar Sponsor
爱发电 赞助
.NET 9.0

React 19完整工程化:架构设计、服务端组件、Hooks、Zustand、TanStack Query、表单处理、性能优化、测试与生产部署。

React

功能概述

React是一项面向实际任务的技能,主要用于Production- 级 React 工程. 这种技能会改变您构建 React 应用程序的方式—— 从组件架构到部署.;构建 React 组件、 页面或 fea。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

React

面向生产环境的 React 工程实践。该技能将彻底改变你构建 React 应用的方式——从组件架构到部署全流程。

适用场景

  • 构建 React 组件、页面或功能模块
  • 实现状态管理(useState、Context、Zustand、TanStack Query)
  • 使用 React 19(服务端组件、use()、Actions)
  • 性能优化(memo、lazy、Suspense)
  • 调试渲染问题、无限循环、闭包过期等
  • 搭建项目架构与目录结构

架构决策

编写代码前,请先明确以下决策:

决策项 可选方案 默认值
渲染方式 SPA / SSR / 静态生成 / 混合渲染 SSR(Next.js)
服务端状态 TanStack Query / SWR / use() TanStack Query
客户端状态 useState / Zustand / Jotai 若需跨组件共享则使用 Zustand
样式方案 Tailwind / CSS Modules / styled Tailwind
表单处理 React Hook Form + Zod / 原生表单 RHF + Zod

规则:服务端状态(API 数据)与客户端状态(UI 状态)是完全不同的两类状态,严禁混用。

组件规范

// ✅ 正确模式
export function UserCard({ user, onEdit }: UserCardProps) {
  // 1. Hook 声明置于最前(始终如此)
  const [isOpen, setIsOpen] = useState(false)
  
  // 2. 衍生状态(禁止使用 useEffect 计算)
  const fullName = `${user.firstName} ${user.lastName}`
  
  // 3. 事件处理器
  const handleEdit = useCallback(() => onEdit(user.id), [onEdit, user.id])
  
  // 4. 提前返回
  if (!user) return null
  
  // 5. JSX(最多 50 行)
  return (...)
}
规则 原因
仅使用具名导出(named exports) 保障重构安全性,提升 IDE 支持度
导出 Props 接口 便于复用,具备类型文档能力
JSX 最多 50 行 超出则拆分为子组件
单文件最多 300 行 按职责拆分为多个组件
Hook 声明统一置于顶部 符合 React 规则,逻辑更可预测

状态管理

是否来自 API?
├─ 是 → 使用 TanStack Query(禁止使用 Redux 或 Zustand)
└─ 否 → 是否在多个组件间共享?
    ├─ 是 → 使用 Zustand(简单场景)或 Context(变更频率极低时)
    └─ 否 → 使用 useState

TanStack Query(服务端状态)

// 查询键工厂 —— 防止拼写错误
export const userKeys = {
  all: ['users'] as const,
  detail: (id: string) => [...userKeys.all, id] as const,
}

export function useUser(id: string) {
  return useQuery({
    queryKey: userKeys.detail(id),
    queryFn: () => fetchUser(id),
    staleTime: 5 * 60 * 1000, // 5 分钟
  })
}

Zustand(客户端状态)

// 轻量级 Store,每个 Store 关注单一职责
export const useUIStore = create()((set) => ({
  sidebarOpen: true,
  toggleSidebar: () => set((s) => ({ sidebarOpen: !s.sidebarOpen })),
}))

// 务必使用 selector —— 避免不必要的重渲染
const isOpen = useUIStore((s) => s.sidebarOpen)

React 19

服务端组件(Next.js App Router 默认启用)

// 服务端组件 —— 在服务端执行,零 JS 下发至客户端
async function ProductList() {
  const products = await db.products.findMany() // 直接访问数据库
  return 
    {products.map(p => )}
} // 客户端组件 —— 必须添加 'use client' 指令 'use client' function AddToCartButton({ productId }: { productId: string }) { const [loading, setLoading] = useState(false) return }
服务端组件 客户端组件
支持 async/await ✅ 支持 useState ✅
支持直接数据库访问 ✅ 支持 onClick ✅
不增加打包体积 增加打包体积
不支持 useState ❌ 不支持 async ❌

use() Hook

// 在渲染中读取 Promise(配合 Suspense)
function Comments({ promise }: { promise: Promise }) {
  const comments = use(promise) // 暂停渲染直至 Promise 解析完成
  return 
    {comments.map(c =>
  • {c.text}
  • )}
}

useActionState(表单)

'use client'
async function submitAction(prev: State, formData: FormData) {
  'use server'
  // ... 服务端逻辑
  return { success: true }
}

function Form() {
  const [state, action, pending] = useActionState(submitAction, {})
  return (
    
{state.error &&

{state.error}

}
) }

性能优化

优先级 技术手段 影响程度
P0 基于路由的代码分割 🔴 高
P0 图片优化(next/image) 🔴 高
P1 长列表虚拟化(tanstack-virtual) 🟡 中
P1 防抖昂贵操作 🟡 中
P2 对昂贵组件使用 React.memo 🟢 低–中
P2 对昂贵计算使用 useMemo 🟢 低–中

React Compiler(React 19+):自动 memo 化。请移除所有手动的 memo/useMemo/useCallback。

常见陷阱

渲染陷阱

// ❌ 当 count 为 0 时渲染字符串 "0"
{count && }

// ✅ 显式布尔判断
{count > 0 && }
// ❌ 直接修改原数组 —— React 无法检测到变化
array.push(item)
setArray(array)

// ✅ 创建新引用
setArray([...array, item])
// ❌ 每次渲染都生成新 key —— 导致组件被销毁重建


// ✅ 使用稳定 key

Hook 陷阱

// ❌ useEffect 不支持异步函数
useEffect(async () => { ... }, [])

// ✅ 在内部定义并调用异步函数
useEffect(() => {
  async function load() { ... }
  load()
}, [])
// ❌ 缺少清理逻辑 —— 可能导致内存泄漏
useEffect(() => {
  const sub = subscribe()
}, [])

// ✅ 返回清理函数
useEffect(() => {
  const sub = subscribe()
  return () => sub.unsubscribe()
}, [])
// ❌ 将对象放入依赖数组 —— 每次渲染都会触发
useEffect(() => { ... }, [{ id: 1 }])

// ✅ 提取基础类型或使用 memoize
useEffect(() => { ... }, [id])

数据获取陷阱

// ❌ 串行请求 —— 性能差
const users = await fetchUsers()
const orders = await fetchOrders()

// ✅ 并行请求
const [users, orders] = await Promise.all([fetchUsers(), fetchOrders()])
// ❌ 竞态条件 —— 无中止机制
useEffect(() => {
  fetch(url).then(setData)
}, [url])

// ✅ 使用 AbortController
useEffect(() => {
  const controller = new AbortController()
  fetch(url, { signal: controller.signal }).then(setData)
  return () => controller.abort()
}, [url])

AI 易犯错误(需规避)

AI 助手在 React 开发中常犯的典型错误:

错误 正确模式
用 useEffect 计算衍生状态 内联计算:const x = a + b
用 Redux 管理 API 数据 服务端状态统一使用 TanStack Query
使用默认导出(default export) 仅使用具名导出:export function X
动态列表中用 index 作 key 使用稳定 ID:key={item.id}
在 useEffect 中发起数据请求 应使用 TanStack Query 或 loader 模式
巨型组件(500+ 行) JSX 超过 50 行或文件超 300 行即拆分
未设置错误边界(Error Boundary) 在应用层、功能模块层、组件层均需添加
忽略 TypeScript 严格模式 启用 strict: true 并修复全部类型错误

速查手册

常用 Hook

Hook 用途
useState 本地状态
useEffect 副作用(订阅、DOM 操作等)
useCallback 保持函数引用稳定
useMemo 缓存昂贵计算结果
useRef 可变引用,用于 DOM 访问等
use() 读取 Promise 或 Context(React 19)
useActionState 表单动作状态(React 19)
useOptimistic 乐观 UI(React 19)

推荐目录结构

src/
├── app/                 # 路由(Next.js)
├── features/            # 功能模块
│   └── auth/
│       ├── components/  # 功能相关组件
│       ├── hooks/       # 功能相关 Hook
│       ├── api/         # API 请求封装
│       └── index.ts     # 公共导出入口
├── shared/              # 跨功能复用
│   ├── components/ui/   # Button、Input 等通用组件
│   └── hooks/           # useDebounce 等通用 Hook
└── providers/           # Context Provider

初始化配置

首次配置请参阅 setup.md。项目跟踪使用 memory-template.md。

核心规则

  1. 服务端状态 ≠ 客户端状态 —— API 数据交由 TanStack Query 管理,UI 状态使用 useState/Zustand;二者严禁混用。
  2. 仅使用具名导出 —— 使用 export function X,禁止 export default;保障安全重构能力。
  3. 先就近共置,再按需提升 —— 初始将状态放在使用处附近;仅当多处需要时才提取提升。
  4. 禁止用 useEffect 计算衍生状态 —— 应内联计算:const total = items.reduce(...);useEffect 仅用于副作用。
  5. 始终使用稳定 key —— 动态列表必须使用 item.id,禁止使用 index。
  6. JSX 最多 50 行 —— 超出即拆分为子组件;单文件上限为 300 行。
  7. TypeScript 启用 strict: true —— 禁止使用 any,禁用隐式 null/undefined;在编译期捕获类型错误。

关联技能

如用户确认,可通过 clawhub install 安装:

  • frontend-design-ultimate —— 使用 React + Tailwind 构建完整 UI
  • typescript —— TypeScript 最佳实践与严格配置
  • nextjs —— Next.js App Router 与部署实践
  • testing —— 使用 Testing Library 测试 React 组件

反馈

  • 若本技能有用:clawhub star react
  • 保持更新:clawhub sync
目录

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
JavaScript React组件优化与性能提升实战
JavaScript React组件优化与性能提升实战

本专题围绕 React 框架在大型前端项目中的性能优化展开,讲解组件生命周期优化、虚拟 DOM 原理、状态管理策略及懒加载技术。通过实战案例,帮助开发者构建性能优良、响应迅速的前端应用。

165

2026.04.13

React 18状态管理与Hooks高级实践
React 18状态管理与Hooks高级实践

本专题专注于 React 18 的高级开发技术,详细讲解 useState、useEffect、useReducer、useContext 等 Hooks 的使用技巧,以及 Redux、Zustand 等状态管理工具的集成与优化方法。通过真实案例,帮助前端开发者构建可维护、性能优良的现代 React 应用。

183

2026.02.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

0

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

0

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

0

2026.10.22

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12.3万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn