问题修复
在 React 18+/19、Next.js App…
适用于构建 React 18+ 应用(.jsx/.tsx、Next.js App Router、create-react-app),解决组件创建、自定义 Hook、状态管理、渲染调试、类组件迁移、Server Components、Suspense、useActionState 表单和性能优化等问题。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 React 18+/19、Next.通用
解决思路
- 分析需求:识别组件层级、状态需求、数据流。
- 选择模式:选择合适的状态管理、数据获取方式。
- 实现:编写带正确类型的 TypeScript 组件。
- 验证:运行 `tsc --noEmit`;如果失败,检查报告的错误,修复所有类型问题,并重新运行直到通过,再继续。
- 优化:在需要的地方应用 memoization,确保可访问性;如果引入新的类型错误,返回第 4 步。
- 测试:使用 React Testing Library 编写测试;如果有任何断言失败,在提交前调试并修复。
- 当处理 RSC 模式、Next.js App Router 时,加载 `references/server-components.md`。
- 当使用 `use()` hook、`useActionState`、表单时,加载 `references/react-19-features.md`。
- 当涉及 Context、Zustand、Redux、TanStack 时,加载 `references/state-management.md`。
- 当涉及自定义 hooks、useEffect、useCallback 时,加载 `references/hooks-patterns.md`。
- 当涉及 memo、lazy、virtualization 时,加载 `references/performance.md`。
- 当涉及 Testing Library、mocking 时,加载 `references/testing-react.md`。
- 当将 class 组件转换为 hooks/RSC 时,加载 `references/migration-class-to-modern.md`。
- 编写 Server Component(Next.js App Router):在 `app/users/page.tsx` 中,不添加 `'use client'`,从 `@/lib/db` 导入 `db`,定义 `User` 接口,默认导出 async 函数 `UsersPage`,用 `await db.user.findMany()` 获取 `users: User[]`,返回 `<ul>` 并用 `users.map` 渲染 `<li key={user.id}>{user.name}</li>`。
- 使用 React 19 的 `useActionState` 实现表单:在文件顶部添加 `'use client'`,从 `react` 导入 `useActionState`;定义 async 函数 `submitForm(_prev: string, formData: FormData): Promise<string>`,从 `formData.get('name')` 获取 `name` 并返回 `Hello, ${name}!`;在 `GreetForm` 中调用 `const [message, action, isPending] = useActionState(submitForm, '')`;使用 `<form action={action}>`;添加 `<input name="name" required />`;提交按钮 `type="submit"` 且 `disabled={isPending}`,按钮文案根据 `isPending` 显示 `Submitting…` 或 `Submit`;当 `message` 存在时渲染 `<p>{message}</p>`。
- 编写带清理的自定义 Hook:使用 `useState` 并传入惰性初始化函数 `() => window.innerWidth` 创建 `width`;在 `useEffect` 中定义 `handler` 调用 `setWidth(window.innerWidth)`,用 `window.addEventListener('resize', handler)` 添加监听,并返回清理函数 `() => window.removeEventListener('resize', handler)`;依赖数组为 `[]`;返回 `width`。
- 使用 TypeScript 并开启 strict mode。
- 实现 error boundaries 以优雅地处理失败。
- 正确使用 `key` props(稳定、唯一的标识符)。
- 清理 effects(返回清理函数)。
- 使用语义 HTML 和 ARIA 实现可访问性。
- 当向 memoized children 传递回调/对象时进行 memoization。
- 为异步操作使用 Suspense boundaries。
- 不要直接修改 state。
- 不要在动态列表中使用数组索引作为 key。
- 不要在 JSX 内创建函数(会导致重新渲染)。
- 不要忘记 useEffect 清理(内存泄漏)。
- 不要忽略 React strict mode 警告。
- 不要在生产环境中跳过 error boundaries。
- 实现 React 功能时,提供带 TypeScript 类型的组件文件。
- 实现 React 功能时,如果逻辑不简单,提供测试文件。
- 实现 React 功能时,简要解释关键决策。
- 在实现中参考以下知识:React 19、Server Components、use() hook、Suspense、TypeScript、TanStack Query、Zustand、Redux Toolkit、React Router、React Testing Library、Vitest/Jest、Next.js App Router、accessibility (WCAG)。
适用边界 · 注意事项
- 非 React 技术栈(Vue、Svelte、Angular 等)。
- 项目要求纯 JavaScript 且不启用 TypeScript strict mode。
- 仅需静态 HTML/CSS 且不涉及 React 交互或状态管理的场景。