← 返回
未分类

@bovinphang/fec-form-handling

Use when building or reviewing substantial forms with React Hook Form, Zod schemas, typed validation, dynamic fields, controlled third-party inputs, file upload, multi-step flows, dependent validation, or form performance. Do not use for trivial 1-3 field forms without validation; Chinese triggers include 表单, 表单校验, 动态字段.
Use when building or reviewing substantial forms with React Hook Form, Zod schemas, typed validation, dynamic fields, controlled third-party inputs, file upload, multi-step flows, dependent validation
yjkj999999
未分类 community v2.5.0 1 版本 100000 Key: 无需
★ 0
Stars
📥 17
下载
💾 0
安装
1
版本
#latest

概述

表单处理

Purpose

管理表单状态、校验和提交,避免复杂表单输入卡顿。

Procedure

  1. 先判断复杂度:10+ 字段、动态字段、联动校验、文件上传、多步流程或输入卡顿时使用 React Hook Form + Zod;极简表单可用原生受控组件。
  2. 用 Zod 定义运行时 schema,并用 z.infer 推导 TypeScript 类型;schema 是外部输入边界,不要只写 TS 类型。
  3. useForm 必须提供 defaultValues,通过 zodResolver 统一校验;错误提示用 aria-invalidaria-describedbyrole="alert"
  4. 第三方受控组件用 Controller,原生 input 优先 register;不要混用两套状态源。
  5. 提交时处理 loading、服务端错误、重复提交和 reset;大型表单用局部订阅和子组件隔离控制重渲染。

Quick Start

import { zodResolver } from "@hookform/resolvers/zod";
import { useForm } from "react-hook-form";
import { z } from "zod";

const loginSchema = z.object({
  email: z.string().email("请输入有效的邮箱地址"),
  password: z.string().min(8, "密码至少 8 个字符"),
});

type LoginForm = z.infer<typeof loginSchema>;

export function LoginFormView() {
  const {
    register,
    handleSubmit,
    formState: { errors, isSubmitting },
  } = useForm<LoginForm>({
    resolver: zodResolver(loginSchema),
    defaultValues: { email: "", password: "" },
  });

  return (
    <form onSubmit={handleSubmit((data) => api.login(data))} noValidate>
      <label htmlFor="email">邮箱</label>
      <input id="email" {...register("email")} aria-invalid={!!errors.email} />
      {errors.email && <span role="alert">{errors.email.message}</span>}

      <label htmlFor="password">密码</label>
      <input id="password" type="password" {...register("password")} />
      {errors.password && <span role="alert">{errors.password.message}</span>}

      <button disabled={isSubmitting}>
        {isSubmitting ? "提交中..." : "提交"}
      </button>
    </form>
  );
}

Detailed References

涉及 ControlleruseFieldArray、联动校验、文件上传、多步表单、异步校验和性能模式时,加载 references/advanced-form-patterns.md

Constraints

  • React Hook Form 默认非受控;只有第三方受控组件才用 Controller
  • defaultValues 必须完整,避免 undefined 触发受控/非受控警告。
  • reset() 应传服务器返回或明确的完整默认对象。
  • 异步校验必须 debounce 或放到提交边界,避免每次键入请求。
  • Zod refine / superRefinepath 必须指向实际字段。

Expected Output

产出类型安全、可访问、提交状态明确的表单;复杂字段和文件上传有 schema 约束,输入过程无明显卡顿,服务端错误能回填到用户可理解的位置。

版本历史

共 1 个版本

  • v2.5.0 从ClawHub迁移发布 当前
    2026-06-07 11:12 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

xhs-explosive-content-detector

user_15292d5a
小红书热门笔记搜索工具,支持关键词搜索获取热门内容数据,基于数据评分排序推荐热门笔记,助力创作者发现热门趋势、获取创作灵感。仅在主Agent中执行,不派发给子Agent。
★ 1 📥 31

xhs-title-copywriter

user_15292d5a
基于用户输入的任何信息生成小红书爆款标题的专业工具。无论用户输入什么,最终目标都是生成小红书爆款标题。
★ 1 📥 34

agnes-image-gen

user_15292d5a
使用 Agnes AI 的图片生成模型生成图片,支持文生图(agnes-image-2.1-flash)和图生图(agnes-image-2.0-flash)。支持自定义 API Key,用户可使用自己的 Agnes Key。优化重点:降低
★ 0 📥 68