前端——HeroUI 知识点大全(三)

简介: 教程来源 https://www.bgnno.cn/ HeroUI表单系统基于React Aria,提供Form、Input、Select、NumberField等可组合组件,支持ARIA实时验证、服务端错误处理、虚拟化滚动、国际化格式化及前缀/后缀等高级功能,兼顾健壮性与开发体验。

三、表单系统:构建健壮的数据录入

3.1 表单组件架构
HeroUI 的表单系统构建在 React Aria Components 之上,提供了一系列可组合的表单组件 :

Form - 表单容器,处理提交和验证

Input / TextField - 文本输入

TextArea - 多行文本

Select / ComboBox - 下拉选择

Checkbox / RadioGroup - 选项选择

NumberField - 数字输入(带增减按钮)

FieldError - 错误信息展示

Description - 辅助说明文字

3.2 Form 组件详解
基础用法

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

export default function SignupForm() {
  return (
    <Form
      action="/api/signup"  // 传统表单提交 URL
      method="post"
      validationBehavior="aria"  // ARIA 验证(实时错误,不阻止提交)
      className="space-y-4 max-w-md"
    >
      <Input
        isRequired
        label="邮箱"
        name="email"
        type="email"
        description="我们将发送验证邮件到此地址"
      />

      <Input
        isRequired
        label="密码"
        name="password"
        type="password"
        minLength={8}
        description="至少 8 个字符"
      />
      <FieldError name="password" />

      <Button type="submit" color="primary">
        注册
      </Button>
    </Form>
  );
}

两种验证模式的对比
image.png
自定义验证函数

<Input
  label="用户名"
  name="username"
  validate={(value) => {
    if (value.length < 3) {
      return "用户名至少需要 3 个字符";
    }
    if (!/^[a-zA-Z0-9]+$/.test(value)) {
      return "只能包含字母和数字";
    }
    return null;  // 返回 null 表示验证通过
  }}
/>

服务器端验证错误

const [serverErrors, setServerErrors] = useState({});

const handleSubmit = async (e: FormEvent) => {
  e.preventDefault();
  const formData = new FormData(e.currentTarget);
  const res = await fetch("/api/register", { method: "POST", body: formData });

  if (!res.ok) {
    const errors = await res.json();
    setServerErrors(errors);  // { email: "邮箱已被注册", username: "用户名已存在" }
  }
};

return (
  <Form validationErrors={serverErrors} onSubmit={handleSubmit}>
    {/* 表单内容 */}
  </Form>
);

当用户修改对应字段时,validationErrors 中的错误会自动清除。

3.3 Input 组件的进阶功能
前缀与后缀

<Input
  label="金额"
  startContent={<span className="text-default-400">¥</span>}
  endContent={<span className="text-default-400">.00</span>}
/>

输入组(InputGroup)
从 v3.0.0-beta.2 开始,HeroUI 提供了 InputGroup 组件,用于将多个输入控件组合在一起 :

import { InputGroup, Input } from "@heroui/react";

<InputGroup>
  <Input placeholder="区号" className="w-24" />
  <Input placeholder="电话号码" />
</InputGroup>

TextArea

<Input
  as="textarea"
  label="个人简介"
  minRows={3}
  maxRows={6}
  description="简短介绍一下自己"
/>

3.4 Select 组件
基础用法

import { Select, SelectItem } from "@heroui/react";

const animals = [
  { key: "cat", label: "猫" },
  { key: "dog", label: "狗" },
  { key: "bird", label: "鸟" },
];

<Select label="选择宠物" items={animals}>
  {(animal) => <SelectItem key={animal.key}>{animal.label}</SelectItem>}
</Select>

Select 的 API 变化(v3.0.0-beta.2)
⚠️ 重要变更:Select.Content 子组件已重命名为 Select.Popover,以保持与其他组件(如 ComboBox、Dropdown)的一致性 。

// ❌ v3.0.0-beta.2 之前
<Select.Content>...</Select.Content>

// ✅ v3.0.0-beta.2 及以后
<Select.Popover>...</Select.Popover>

虚拟化滚动(大数据量优化)

<Select
  label="大数据量选项"
  items={largeDataset}  // 假设有 5000 条数据
  isVirtualized  // 开启虚拟化
  virtualizedItemSize={48}  // 每项高度 48px
/>

开启 isVirtualized 后,Select 内部使用 @tanstack/react-virtual,仅渲染可视区域内的选项,大幅提升性能。

3.5 NumberField 组件
从 v3.0.0-beta.2 引入 :

import { NumberField } from "@heroui/react";

<NumberField
  label="数量"
  defaultValue={1}
  minValue={1}
  maxValue={99}
  step={1}
  formatOptions={
  { style: "decimal" }}
/>

国际化支持:formatOptions 基于 Intl.NumberFormat,支持货币、百分比、小数位数等格式化。
来源:
https://bgnno.cn/

相关文章
|
8天前
|
存储 程序员 Linux
初级程序员必备的十大技能之 Git 版本控制(一)
教程来源 http://xcfsr.cn Git是程序员的“后悔药”与“时光机”:可随时回退错误修改、隔离并行开发、一键恢复稳定版本。作为分布式版本控制系统,它本地全量存储、离线可用、安全可靠,支撑全球90%以上团队高效协作。
|
18天前
|
前端开发 JavaScript 开发者
前端组件库 ——LayUI 知识点大全(四)
教程来源 https://zlpow.cn LayUI 2.8+/3.0 支持 CSS 变量主题定制、深浅色切换;提供移动端专用版本;支持按需引入与模块化加载;可开发自定义模块及集成 ECharts 等第三方插件,兼顾简洁性与扩展性,适合快速构建后台系统。
|
18天前
|
前端开发 JavaScript 容器
前端组件库 ——LayUI 知识点大全(三)
教程来源 https://bncne.cn LayUI基础元素丰富实用:按钮支持多色、多尺寸及图标组合;图标为矢量字体,可自由缩放变色;表单模块集成验证与交互;layer弹层、table表格、laydate日期、upload上传等核心模块,让后台开发简洁高效。
|
23天前
|
前端开发 JavaScript vr&ar
前端组件库 ——A‑Frame 知识点大全(一)
教程来源 https://tmywi.cn A-Frame 是 Mozilla 开发的开源 WebXR 框架,基于 Three.js 与 WebGL,以声明式 HTML(如 `&lt;a-scene&gt;` `&lt;a-box&gt;`)降低 VR/AR 开发门槛。支持跨平台运行,兼具组件化、高性能与易扩展性,让熟悉 HTML 的开发者快速构建沉浸式 3D 应用。
|
23天前
|
自然语言处理 前端开发 容器
前端组件库 ——FormMaking 知识点大全(二)
教程来源 https://zlpow.cn FormMaking字段体系涵盖基础、高级与布局三类字段,支持丰富配置;全局配置含国际化、默认属性及字段标识绑定,助力低代码高效构建企业级表单。
|
1天前
|
设计模式 程序员
程序员必备的十大技能(进阶版)之设计模式与架构思维(四)
教程来源 https://ltglu.cn/ 架构思维聚焦系统级设计:分层架构强调职责分离与上下依赖;六边形架构通过端口/适配器解耦核心业务与外部环境;CQRS分离读写模型提升性能与可维护性;事件驱动架构则以异步事件实现服务松耦合。
|
1天前
|
设计模式 算法 程序员
程序员必备的十大技能(进阶版)之设计模式与架构思维(三)
教程来源 https://wkmsa.cn/ 行为型模式聚焦对象间职责分配与通信协作。含策略(算法可插拔)、观察者(事件自动通知)、责任链(请求逐级处理)、模板方法(算法骨架复用)、状态(行为随状态切换)等核心模式,提升系统灵活性与可维护性。
|
1天前
|
Cloud Native 安全 程序员
程序员必备的十大技能(进阶版)之云原生与容器化(五)
教程来源 https://vbzcj.cn/ 本文系统梳理云原生安全加固(镜像、运行时、网络、RBAC)、Helm包管理、GitOps持续交付(ArgoCD+CI/CD)、Service Mesh、eBPF及Serverless容器等核心实践,涵盖配置示例与最佳实践清单,助力构建安全、可靠、可观测的现代化K8s应用体系。
|
1天前
|
Arthas 运维 Java
程序员必备的十大技能(进阶版)之性能调优与故障排查(二)
教程来源 qfcrz.cn 本节系统梳理Java内存问题排查全流程:涵盖JVM内存结构(堆、元空间、直接内存等)、四大典型泄漏场景(静态集合、ThreadLocal、监听器、动态代理)、jstat/jmap/jcmd/Arthas等实战工具用法、MAT深度分析技巧(Dominator Tree、OQL查询),以及GC调优策略与I/O问题定位方法。
|
1天前
|
设计模式 程序员
程序员必备的十大技能(进阶版)之设计模式与架构思维(二)
教程来源 https://vrhyh.cn/ 结构型模式关注类与对象的组合组织,提升系统灵活性与可维护性。含适配器(兼容接口)、装饰器(动态增强)、代理(控制访问)、外观(简化子系统)、组合(树形结构)五种核心模式,均通过封装、委托与抽象实现松耦合设计。

热门文章

最新文章