浅谈React19 开发规范

 更新时间:2026年06月15日 10:01:20   作者:朝阳39  
本文主要介绍了浅谈React19 开发规范,包括编译器优化、Actions、Form原生支持、ServerComponents、新Hooks等,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

React 19 带来了编译器、Actions、Form 原生支持、Server Components、新 Hooks等重大特性,开发规范相比 React 18 有颠覆性更新

这份规范是企业级、可直接落地的标准,覆盖:项目结构、代码风格、组件编写、 Hooks 、表单/ Actions、性能、TypeScript、最佳实践。

一、核心原则(React 19 必守)

  1. 优先使用 React 19 原生能力,弃用旧方案
    • 表单:用原生 <form action> + useActionState,弃用 Formik / React Hook Form(简单场景)
    • 数据获取:用 use + Suspense + Server Components,弃用冗余状态管理
    • 样式:优先 CSS Modules / Tailwind,禁止行内样式滥用
  2. 组件必须纯函数化,无副作用、无隐式依赖
  3. 服务端组件(RSC)默认化:能放服务端就不放客户端
  4. 编译器优化优先,减少手动 memo
  5. TypeScript 强制全量使用

二、项目目录规范(React 19 标准结构)

src/
├── app/                    # App Router 目录(Next.js / React 19 标准)
│   ├── page.tsx            # 页面入口(默认服务端组件)
│   ├── layout.tsx          # 根布局
│   ├── error.tsx           # 错误边界
│   ├── loading.tsx         # Suspense 加载
│   └── (routes)/           # 路由分组
├── components/             # 公共组件
│   ├── ui/                 # 基础 UI(Button、Input)
│   ├── feature/            # 业务组件
│   └── client/             # 明确标记客户端组件
├── lib/                    # 工具函数、工具类
├── actions/                # React 19 Server Actions
├── hooks/                  // 自定义 Hooks
├── types/                  # TS 类型定义
└── styles/                 # 全局样式

强制规则

  • 服务端组件:不要写 ‘use client’
  • 客户端组件:必须在文件顶部声明 ‘use client’
  • 所有页面默认服务端组件

三、代码风格规范

1. 命名规范

  • 组件:大驼峰 UserProfile.tsx
  • 文件:与组件名一致 UserProfile.tsx
  • 函数/变量:小驼峰 handleSubmit
  • 常量:全大写+下划线 MAX_RETRY_COUNT
  • Server Actions:以 action 结尾 submitFormAction
  • 自定义 Hooks:以 use 开头 useUserInfo

2. 格式规范

  • 2 空格缩进
  • 语句末尾必须加分号
  • JSX 单标签自闭合 <Input />
  • 导入顺序:第三方库 → 公共组件 → 工具 → 样式
  • 禁止死代码:未使用变量、import、函数必须清理

四、组件编写规范(React 19 核心)

1. 服务端组件(默认)

  • 无状态、无 Hooks、无事件监听
  • 直接获取数据、直接渲染
  • 可嵌套客户端组件,但不能导入客户端组件的 Hooks
// app/page.tsx  默认服务端组件
import { getUserList } from '@/actions/userActions'

export default async function HomePage() {
  const users = await getUserList() // 直接 await 获取数据
  return <div>{users.map(user => <p key={user.id}>{user.name}</p>)}</div>
}

2. 客户端组件(必须标记)

// components/client/LikeButton.tsx
'use client' // 强制第一行

import { useState } from 'react'

export default function LikeButton() {
  const [like, setLike] = useState(false)
  return <button onClick={() => setLike(!like)}>{like ? '已赞' : '点赞'}</button>
}

3. 组件定义规则

  • 只使用箭头函数 / 函数声明,禁止 class 组件
  • Props 必须用 TS 定义,必填/可选明确
  • Props 解构使用,提高可读性
  • 一个文件只导出一个默认组件
  • 逻辑与 UI 分离:复杂组件拆分
type UserCardProps = {
  user: { id: string; name: string }
  onDelete?: (id: string) => void
}

export default function UserCard({ user, onDelete }: UserCardProps) {
  return (
    <div className="card">
      <h3>{user.name}</h3>
      {onDelete && <button onClick={() => onDelete(user.id)}>删除</button>}
    </div>
  )
}

4. 组件主体内不写DOM操作

因为每次数据状态改变刷新页面,都会执行组件函数。

五、React 19 Hooks 规范

1. Hooks 使用顺序固定,不嵌套、不条件执行

2. 优先使用 React 19 新 Hooks

  • useActionState:表单状态
  • useFormStatus:表单提交状态
  • useOptimistic:乐观更新
  • use:读取 Promise / 上下文

3. 禁用过时写法

  • 弃用 useState + useEffect 获取数据
  • 弃用手动管理 loading/error

4. 自定义 Hooks 规范

  • 必须以 use 开头
  • 内部只使用 Hooks
  • 返回值清晰,使用数组或对象
// hooks/useUserInfo.ts
'use client'
import { use } from 'react'
import { fetchUser } from '@/actions/userActions'

export function useUserInfo(userId: string) {
  const user = use(fetchUser(userId)) // React 19 use()
  return { user }
}

六、React 19 表单与 Actions 规范(最重要)

React 19 原生支持表单,彻底告别第三方库。

1. Server Actions 定义

// actions/userActions.ts
'use server' // 服务端 Action

export async function updateUserAction(prevState: any, formData: FormData) {
  const name = formData.get('name')
  // 数据库操作
  return { success: true, message: '保存成功' }
}

2. 表单组件(客户端)

'use client'
import { useActionState } from 'react'
import { updateUserAction } from '@/actions/userActions'

export default function UserForm() {
  // React 19 表单状态
  const [state, formAction] = useActionState(updateUserAction, null)
  const { pending } = useFormStatus() // 提交状态

  return (
    <form action={formAction}>
      <input name="name" defaultValue="张三" />
      <button disabled={pending} type="submit">
        {pending ? '保存中...' : '保存'}
      </button>
      {state?.message && <p>{state.message}</p>}
    </form>
  )
}

3. 乐观更新(useOptimistic)

const [optimisticUsers, addOptimisticUser] = useOptimistic(
  users,
  (state, newUser) => [...state, newUser]
)

七、数据获取规范(React 19)

  1. 服务端组件:直接 await 获取数据
  2. 客户端组件:使用 use() + Suspense
  3. 禁止 useEffect 获取数据
  4. 加载、错误使用 loading.tsx / error.tsx
// 客户端数据获取
'use client'
import { use, Suspense } from 'react'

function UserData({ userId }: { userId: string }) {
  const user = use(fetchUser(userId))
  return <div>{user.name}</div>
}

export default function UserPage() {
  return (
    <Suspense fallback={<div>加载中...</div>}>
      <UserData userId="1" />
    </Suspense>
  )
}

八、性能优化规范(React 19 编译器)

  1. 优先 React 编译器自动优化,无需手动 memo
  2. 禁止滥用 memo / useMemo / useCallback
  3. 列表必须加 key,且不使用 index
  4. 客户端组件尽量轻量化,大组件拆分为服务端+客户端
// 正确 key
users.map(user => <User key={user.id} user={user} />)

// 错误 key(禁止)
users.map((user, idx) => <User key={idx} user={user} />)

九、TypeScript 强制规范

  1. 所有组件、函数、变量必须定义类型
  2. 禁止使用 any,必须用 unknown + 类型守卫
  3. Props、Actions 返回值必须定义接口
  4. Server Actions 严格校验 formData
type User = {
  id: string
  name: string
  age?: number // 可选
}

type ActionState = {
  success: boolean
  message?: string
}

export async function updateUserAction(
  prevState: ActionState,
  formData: FormData
): Promise<ActionState> {
  return { success: true }
}

十、禁止行为(红线规范)

  1. 禁止在服务端组件使用 'use client'、Hooks、事件
  2. 禁止在客户端组件写耗时逻辑
  3. 禁止 useEffect 充当数据请求
  4. 禁止嵌套多层条件渲染导致难以维护
  5. 禁止表单不使用 action 而用旧 onSubmit
  6. 禁止直接操作 DOM,一律用 React 方式

十一、Git / 提交规范

  • feat: 新功能
  • fix: 修复
  • refactor: 重构
  • style: 格式
  • chore: 构建/工具
  • docs: 文档

示例:

feat: add user list server component

总结(React 19 最核心 5 条)

  1. 默认服务端组件,客户端必须标记 ‘use client’
  2. 表单用 action + useActionState,弃用第三方库
  3. 数据获取用 await / use(),禁止 useEffect
  4. 靠 React 编译器优化,少用 memo
  5. 全量 TypeScript,禁止 any

到此这篇关于浅谈React19 开发规范的文章就介绍到这了,更多相关React19规范内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入对比三种主流的React状态管理方案(Redux Toolkit vs Zustand vs Context API)

    深入对比三种主流的React状态管理方案(Redux Toolkit vs Zustand vs Contex

    在现代React开发中,状态管理是构建复杂应用程序的核心挑战之一,本文将深入对比三种主流的React状态管理方案,Redux Toolkit、Zustand和Context API,希望对大家有所帮助
    2025-09-09
  • React实现下拉框的key,value的值同时传送

    React实现下拉框的key,value的值同时传送

    这篇文章主要介绍了React实现下拉框的key,value的值同时传送方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • React中FormData的使用实例详解

    React中FormData的使用实例详解

    FormData 是一个非常灵活的工具,适用于处理表单数据,特别是在需要发送文件或复杂表单数据时,本文给大家介绍React中FormData的使用示例详解,感兴趣的朋友一起看看吧
    2025-04-04
  • React找不到模块“./index.module.scss”或其相应的类型声明及解决方法

    React找不到模块“./index.module.scss”或其相应的类型声明及解决方法

    这篇文章主要介绍了React找不到模块“./index.module.scss”或其相应的类型声明及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • React手写tab切换问题

    React手写tab切换问题

    今天介绍下React手写tab切换问题,代码部分包括父文件,子文件及子文件tab样式,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • 详解使用create-react-app添加css modules、sasss和antd

    详解使用create-react-app添加css modules、sasss和antd

    这篇文章主要介绍了详解使用create-react-app添加css modules、sasss和antd,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • React18的useEffect执行两次如何应对

    React18的useEffect执行两次如何应对

    这篇文章主要给大家介绍了关于React18的useEffect执行两次如何应对的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用React具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • ahooks控制时机的hook实现方法

    ahooks控制时机的hook实现方法

    这篇文章主要为大家介绍了ahooks控制时机的hook实现方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • react路由跳转传参刷新页面后参数丢失的解决

    react路由跳转传参刷新页面后参数丢失的解决

    这篇文章主要介绍了react路由跳转传参刷新页面后参数丢失的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 将React+Next.js的项目部署到服务器的方法

    将React+Next.js的项目部署到服务器的方法

    本文详细介绍了将React+Next.js项目部署到服务器的步骤,包括服务器环境准备、项目配置与构建、启动服务、配置Nginx反向代理、HTTPS配置、验证与监控以及高级优化,感兴趣的朋友一起看看吧
    2025-03-03

最新评论