React 代码审查提示词(hooks 依赖、无效重渲染、key、副作用清理逐项检查)

审查 React 组件或排查「页面卡、数据闪、请求发两次、状态不更新」这类问题时用:让 AI 按 React 特有的问题清单逐项检查 hooks 用法、渲染性能、列表 key、副作用清理和状态设计,给出修改后的代码。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
你是一名精通 React 的前端工程师,熟悉函数组件、hooks 的规则和常见反模式。请审查下面的组件。

背景:
- React 版本与框架:[如 React 19 + Next.js]
- 状态管理方式:[状态管理方式](例:useState、Redux、Zustand)
- 用户反馈的问题:[如输入框打字卡顿,没有就写无]
- 组件代码(包括它用到的自定义 hook):
  [粘贴代码]

逐项检查,只报告真实存在的问题:
1. hooks 规则:是否在条件、循环里调用 hook;自定义 hook 命名是否以 use 开头。
2. useEffect:
   - 依赖数组是否完整,有没有闭包拿到旧值;
   - 是否把本该在渲染时直接计算的派生数据放进了 effect + setState;
   - 订阅、定时器、事件监听、未完成的请求是否在清理函数里取消;
   - 开发模式严格模式下 effect 会执行两次,代码是否能承受。
3. 渲染性能:每次渲染都新建的对象、数组、函数传给了被 memo 的子组件;状态放得太高导致大范围重渲染;是否真的需要 useMemo / useCallback(不要建议到处加)。
4. 列表:key 是否稳定唯一,有没有用数组下标导致删除、排序后状态错位。
5. 状态设计:重复或可推导的状态、多个状态应该合并、受控与非受控输入混用。
6. 其他:直接修改 state 对象或数组、在渲染中产生副作用、可访问性(按钮用 div、缺少 label)。

输出:
- 问题表:严重程度 | 位置 | 问题 | 会导致的现象;
- 对严重问题给出修改后的代码片段,说明改了什么;
- 如果用户反馈的问题能被某条解释,明确指出是哪一条。

不确定的写「需确认」,例如组件的父组件如何传参会影响结论时。

高亮处换成你自己的内容:[如 React 19 + Next.js]、[状态管理方式]、[如输入框打字卡顿,没有就写无]、[粘贴代码]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:[用户反馈的问题] 很有用,「请求发了两次」「切换标签后显示的还是上一个人的数据」这类描述能让 AI 直接对上原因。组件用到的自定义 hook 一定要一起贴,很多问题藏在 hook 里。

常见坑:

  • 开发模式下 React 严格模式会故意让 effect 挂载、卸载、再挂载一次,看到请求发两次不一定是 Bug;但如果没有清理函数导致重复订阅,那就是问题。
  • 不要让 AI「给所有函数都加 useCallback」。只有传给 memo 组件、或作为其他 hook 依赖的函数才值得加,否则只会让代码更难读。
  • 用数组下标做 key,在列表只追加、不删除不排序时没问题;一旦能删除或拖拽排序,输入框内容就会串行。

追问技巧:修改后把新代码贴回去,说「只检查上次指出的问题是否都已修复,有没有引入新的依赖问题」。

示例输出

示例,仅供参考(节选)
严重程度位置问题现象
严重useEffect 第 14 行依赖数组缺少 userId,切换用户后不会重新请求显示上一个用户的数据
严重同上请求没有取消,快速切换时旧请求后返回会覆盖新数据数据闪回
一般fullName 状态由 first 和 last 推导,不需要单独存成状态多一次渲染
jsx
useEffect(() => {
  const controller = new AbortController()
  fetch(`/api/users/${userId}`, { signal: controller.signal })
    .then((r) => r.json())
    .then(setUser)
    .catch((e) => { if (e.name !== 'AbortError') setError(e) })
  return () => controller.abort()
}, [userId])

const fullName = `${first} ${last}` // 渲染时直接计算

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~