React Form Prompt Design 整理
React_Form_Prompt_Design
问题
React_Form_Prompt_Design
标准回答
设计包含上下文约束的 React 表单组件 Prompt
要让大模型生成能直接使用的 React 表单组件,Prompt 必须覆盖四个维度:字段定义、验证规? 、交互行为、代码规范。以下是一个实战级 Prompt 模板:
用 React 18 + TypeScript + React Hook Form 写一个用户注册表单组件。
字段清单:- 用户名:必填,2-10 个字符,只能包含字母数字下划线- 邮箱:必填,标准邮箱格式- 密码:必填,8-20 位,至少包含一个大写、一个小写、一个数字- 确认密码:必填,必须和密码字段一致- 手机号:选填,11 位数字,1 开头
验证行为:- 每个字段失焦时触发校验,不要边打字边校验- 错误提示红色小字,显示在对应输入框正下方- 密码强度用三段式进度条展示(弱/中/强)- 确认密码字段只在密码字段有值后才启用
提交逻辑:- 任一必填字段未通过校验时,提交按钮 disabled 且置灰- 点击提交后按钮变成 loading 状态,显示"提交中..."- 请求完成前禁止重复点击- 成功后调用 onSuccess 回调并清空表单,失败后保留已填内容
代码要求:- 用函数组件 + hooks,不用 class 组件- 类型定义单独放一个 types.ts 文件- 验证规则用 zod schema 定义,不要散落在组件里- 错误信息统一放 constants.ts,支持国际化替换- 样式用 Tailwind CSS,响应式适配移动端- 关键逻辑加注释,特别是正则表达式要写清楚匹配什么
输出格式:- RegisterForm.tsx(主组件)- types.ts(类型定义)- schema.ts(zod 验证规则)- constants.ts(错误信息常量)- 最后给一个使用示例此 Prompt 的关键在于把每个细节写死,AI 没有发挥空间,输出质量稳定。
扩展知识
1. 为什么用 React Hook Form 而不是受控组件?
受控组件每个字段都要 useState,每次输入触发重渲染。5 个字段的表单打一个字渲染 5 遍。React Hook Form 使用非受控组件(ref),只在提交或校验时收集数据,性能差距可达 10 倍以上。
2. 验证库选型对比
| 维度 | zod | yup | joi |
|---|---|---|---|
| 包体积 | 12KB | 22KB | 140KB |
| TypeScript 支持 | 原生完美 | 需额外配置 | 较弱 |
| API 风格 | 链式调用 | 链式调用 | 配置对象 |
| 错误信息定制 | 简单直接 | 需额外配置 | 较麻烦 |
| 生态整合 | React Hook Form 官方推荐 | 社区主流 | Node 端 |
zod 与 TypeScript 配合最好,定义一个 schema 同时得到运行时校验和类型定义。
3. 写 Prompt 容易忽略的坑
- 边界情况未提(如用户名前后空格不 trim) → AI 不会处理
- 联动关系不明确 → 需单独描述
if userType === 'company' then companyName.required = true - 一次性生成复杂表单 → 建议分三轮:类型定义+验证 schema → 组件骨架 → 样式优化
面试官追问
Q1:表单字段多了 Prompt 很长,怎么组织让 AI 不漏东西?
A:用结构化格式(Markdown 表格或 YAML 缩进),每个字段单独一个 block。末尾加”请确认你理解了所有 N 个字段的要求后再生成代码”,让 AI 先复述需求。
Q2:验证逻辑复杂(字段联动),Prompt 怎么写?
A:联动关系单独拎出来写,不要混在字段定义里。用伪代码或流程图表达,如 if userType === 'company' then companyName.required = true。越复杂的逻辑越要明确。
Q3:生成的代码有 bug,怎么通过改 Prompt 来修?
A:把 bug 现象描述清楚喂回去,例如”确认密码字段校验有问题:密码清空后再填确认密码,校验不触发。请修复,确保密码字段变化时重新校验确认密码字段”。实质是将 debug 思路用自然语言表达。
Q4:React Hook Form 和 Formik 推荐哪个?
A:新项目选 React Hook Form。性能:非受控组件重渲染少,快 2-3 倍;体积:8KB vs 12KB;API 更简洁。Formik 优势是社区资料多,但已非首选。
关键点
要让大模型生成能直接使用的 React 表单组件,Prompt 必须覆盖四个维度:字段定义、验证规则、交互行为、代码规范。
- 以下是一个实战级 Prompt 模板:
用 React 18 + TypeScript + React Hook Form 写一个用户注册表单组件。- 字段清单:- 用户名:必填,2-10 个字符,只能包含字母数字下划线- 邮箱:必填,标准邮箱格式- 密码:必填,8-20 位,至少包含一个大写、一个小写、一个数字- 确认密码:必填,必须和密码字段一致- 手机号:选填,11 位数字,1 开头
验证行为:- 每个字段失焦时触发校验,不要边打字边校验- 错误提示红色小字,显示在对应输入框正下方- 密码强度用三段式进度条展示(弱/中/强)- 确认密码字段只在密码字段有值后才启用
提交逻辑:- 任一必填字段未通过校验时,提交按钮 disabled 且置灰- 点击提交后按钮变成 loading 状态,显示"提交中..."- 请求完成前禁止重复点击- 成功后调用 onSuccess 回调并清空表单,失败后保留已填内容
代码要求:- 用函数组件 + hooks,不用 class 组件- 类型定义单独放一个 types.ts 文件- 验证规则用 zod schema 定义,不要散落在组件里- 错误信息统一放 constants.ts,支持国际化替换- 样式用 Tailwind CSS,响应式适配移动端- 关键逻辑加注释,特别是正则表达式要写清楚匹配什么
输出格式:- RegisterForm.tsx(主组件)- types.ts(类型定义)- schema.ts(zod 验证规则)- constants.ts(错误信息常量)- 最后给一个使用示例此 Prompt 的关键在于把每个细节写死,AI 没有发挥空间,输出质量稳定。
- 受控组件每个字段都要 useState,每次输入触发重渲染。
备注
React_Form_Prompt_Design
要让大模型生成能直接使用的 React 表单组件,Prompt 必须覆盖四个维度:字段定义、验证规则、交互行为、代码规范。以下是一个实战级 Prompt 模板:
用 React 18 + TypeScript + React Hook Form 写一个用户注册表单组件。- 字段清单:- 用户名:必填,2-10 个字符,只能包含字母数字下划线- 邮箱:必填,标准邮箱格式- 密码:必填,8-20 位,至少包含一个大写、一个小写、一个数字- 确认密码:必填,必须和密码字段一致- 手机号:选填,11 位数字,1 开头
验证行为:- 每个字段失焦时触发校验,不要边打字边校验- 错误提示红色小字,显示在对应输入框正下方- 密码强度用三段式进度条展示(弱/中/强)- 确认密码字段只在密码字段有值后才启用
提交逻辑:- 任一必填字段未通过校验时,提交按钮 disabled 且置灰- 点击提交后按钮变成 loading 状态,显示"提交中..."- 请求完成前禁止重复点击- 成功后调用 onSuccess 回调并清空表单,失败后保留已填内容
代码要求:- 用函数组件 + hooks,不用 class 组件- 类型定义单独放一个 types.ts 文件- 验证规则用 zod schema 定义,不要散落在组件里- 错误信息统一放 constants.ts,支持国际化替换- 样式用 Tailwind CSS,响应式适配移动端- 关键逻辑加注释,特别是正则表达式要写清楚匹配什么
输出格式:- RegisterForm.tsx(主组件)- types.ts(类型定义)- schema.ts(zod 验证规则)- constants.ts(错误信息常量)- 最后给一个使用示例此 Prompt 的关键在于把每个细节写死,AI 没有发挥空间,输出质量稳定。
- 受控组件每个字段都要 useState,每次输入触发重渲染。5 个字段的表单打一个字渲染 5 遍。React Hook Form 使用非受控组件(ref),只在提交或校验时收集数据,性能差距可达 10 倍以上。
-
2. 验证库选型对比
| 维度 | zod | yup | joi |
|---|---|---|---|
| 包体积 | 12KB | 22KB | 140KB |
| TypeScript 支持 | 原生完美 | 需额外配置 | 较弱 |
| API 风格 | 链式调用 | 链式调用 | 配置对象 |
| 错误信息定制 | 简单直接 | 需额外配置 | 较麻烦 |
| 生态整合 | React Hook Form 官方推荐 | 社区主流 | Node 端 |
zod 与 TypeScript 配合最好,定义一个 schema 同时得到运行时校验和类型定义。
-
本文已做格式统一与噪声清理,保留原始语义。
-
、交互行为、代码规范**。以下是一个实战级 Prompt 模板:
-
用 React 18 + TypeScript + React Hook Form 写一个用户注册表单组件。
-
- 用户名:必填,2-10 个字符,只能包含字母数字下划线
-
- 邮箱:必填,标准邮箱格式
-
- 密码:必填,8-20 位,至少包含一个大写、一个小写、一个数字
-
本文已做格式统一与噪声清理,保留原始语义。
Share Article
If this article helped you, please share it with others!