ProComponents, templates & AI tooling
HeroUI
27.7k

Form

Form 从 HeroUI v2 到 v3 的迁移指南。

完整的 API 参考、样式指南与高级示例请参阅 v3 Form 文档。本指南只关注从 HeroUI v2 的迁移。

主要变化

1. Form 组件 prop

v2 与 v3 之间,Form 组件的 prop 大体保持不变,仅新增了一个:

属性v2v3说明
validationBehavior相同:"native" | "aria"
validationErrors相同:Record<string, string | string[]>
onSubmit相同
onReset相同
action相同
method相同
encType相同
target相同
className相同
onInvalid新增:表单验证失败时调用的处理函数

结构变化

在 v2 中,Form 组件的用法:

import { Form, Button } from "@heroui/react";

export default function App() {
  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    console.log("Form submitted");
  };

  return (
    <Form onSubmit={handleSubmit}>
      {/* Form content */}
      <Button type="submit">Submit</Button>
    </Form>
  );
}

在 v3 中,Form 组件的用法保持一致:

import { Form, Button } from "@heroui/react";

export default function App() {
  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    console.log("Form submitted");
  };

  return (
    <Form onSubmit={handleSubmit}>
      {/* Form content */}
      <Button type="submit">Submit</Button>
    </Form>
  );
}

迁移示例

带 onInvalid 处理函数的表单(v3 新增)

{/* v2 没有 onInvalid prop */}
<Form onSubmit={onSubmit}>
  {/* Form content */}
  <Button type="submit">Submit</Button>
</Form>
<Form
  onInvalid={(e) => {
    e.preventDefault();
    // Custom handling when form validation fails
    console.log("Form validation failed");
  }}
  onSubmit={onSubmit}
>
  {/* Form content */}
  <Button type="submit">Submit</Button>
</Form>

onInvalid 处理函数会在表单验证失败时被调用。默认情况下,第一个无效字段会获得焦点;通过调用 e.preventDefault() 可以自定义这一行为。

总结

  1. Form 组件:没有破坏性变更——prop 与行为保持一致
  2. 新增 proponInvalid 可用于自定义校验失败时的处理逻辑

迁移步骤

  1. 无需改动:Form 组件在 v3 中的工作方式与 v2 相同
  2. 可选:如果你需要自定义校验失败时的处理逻辑,可使用新增的 onInvalid prop

关于表单字段

虽然 Form 组件本身没有变化,但其中使用的表单字段组件(例如 InputTextField 等)在 v3 中已有更新。具体的字段迁移说明请参阅各自的迁移指南。

本页目录