React Form Prompt Design 整理

2345 words
12 minutes
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. 验证库选型对比#

维度zodyupjoi
包体积12KB22KB140KB
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#

要让大模型生成能直接使用的 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. 验证库选型对比#

维度zodyupjoi
包体积12KB22KB140KB
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!

Profile Image of the Author
Estars
这条路要走完,才能看到世界的终点,是海纳百川,还是星火燎原。
公告
欢迎来到我的博客!这是一则示例公告。
Music
Cover

Music

No playing

0:00 0:00
No lyrics available
Categories
Tags
Site Statistics
Posts
91
Categories
5
Tags
44
Total Words
374,063
Running Days
0 days
Last Activity
0 days ago

Table of Contents