前端——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/

相关文章
|
安全 IDE Java
使用Spring Initailizr功能~
使用Spring Initailizr功能~
726 1
|
前端开发 Java 数据库连接
Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
|
25天前
|
设计模式 监控 前端开发
前端——HeroUI 知识点大全(五)
教程来源 https://www.aescc.cn/ HeroUI 基于 Tailwind 实现响应式设计,支持断点定制与内置适配;采用复合组件、无头架构(React Aria + Tailwind)、data-slot 样式标记及组合式 API;深度融合 React 18/19 并发特性,集成虚拟滚动与 memo 优化,兼顾高性能与高可定制性。
|
传感器 人工智能 IDE
AI IDE正式上线!通义灵码开箱即用
作为AI原生的开发环境工具,通义灵码AI IDE深度适配了最新的千问3大模型,并全面集成通义灵码插件能力,具备编程智能体、行间建议预测、行间会话等功能。
5902 171
|
6月前
|
负载均衡 算法 Java
微服务篇
本文详解SpringBoot自动装配原理、启动流程、核心注解@SpringBootApplication组成,以及SpringCloud微服务中注册发现、负载均衡、限流熔断、服务降级等实现方案,涵盖常用起步依赖、配置管理、跨域处理及项目实战配置。
|
9月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
7028 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
druid NoSQL Redis
后台组件-配置
配置组件集成了平台所需的各类公用配置
|
JSON 前端开发 数据可视化
前端开发者狂喜!30K star开源组件库,界面美观度/开发速度双碾压!
嗨,大家好,我是小华同学。Layui 是一款开源前端 UI 组件库,具有极简设计、强大功能和卓越性能,支持布局、表单、表格、弹层等六大模块,组件高度可定制。它无需复杂构建工具,直接面向浏览器开发,极大提升开发效率与界面美观度。适合新手和老手,快来试试吧!
850 0
|
安全 监控 网络安全
HW蓝队面试题精选
该内容是关于网络安全面试的题型,涵盖了网络安全的多个重要方面。
631 4