ProComponents, templates & AI tooling
HeroUI
27.7k

v3.0.0-alpha.34

用 Form、TextField、RadioGroup、Label、Input、Fieldset 等简洁 API 构建表单的核心组件。

2025 年 10 月 15 日

此版本引入了一系列基于表单的组件、表单字段 token,重新组织了 Storybook,并对各组件之间的 data-slot 标识做了统一对齐。

安装

升级到最新版本:

npm i @heroui/styles@alpha @heroui/react@alpha
pnpm add @heroui/styles@alpha @heroui/react@alpha
yarn add @heroui/styles@alpha @heroui/react@alpha
bun add @heroui/styles@alpha @heroui/react@alpha

正在使用 AI 助手? 只需对它说一句「Hey Cursor,把 HeroUI 升级到最新版本」,AI 助手就会自动对比版本并应用必要的变更。了解更多请参阅 HeroUI MCP 服务器

新增功能

基于表单的组件

我们引入了一整套基于 React Aria Components 构建的表单类组件,为构建表单提供了无障碍且可组合的基础构件。这些组件包括 DescriptionFieldErrorFieldsetFormInputLabelRadioGroupTextFieldTextArea

Description

我们不会将你的邮箱分享给任何人。
import {Description, Input, Label} from "@heroui/react";

export function Basic() {
  return (
    <div className="flex flex-col gap-1">

FieldError

用户名至少需要 3 个字符
"use client";

import {FieldError, Input, Label, TextField} from "@heroui/react";
import {useState} from "react";

Fieldset

个人资料设置更新你的个人资料信息。
至少 10 个字符
"use client";

import {FloppyDisk} from "@gravity-ui/icons";
import {
  Button,

Form

至少 8 个字符,且包含 1 个大写字母和 1 个数字
"use client";

import {Check} from "@gravity-ui/icons";
import {Button, Description, FieldError, Form, Input, Label, TextField} from "@heroui/react";

Input

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

export function Basic() {
  return <Input aria-label="姓名" className="w-64" placeholder="输入你的姓名" />;
}

Label

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

export function Basic() {
  return (
    <div className="flex flex-col gap-1">
      <Label htmlFor="name">姓名</Label>
      <Input className="w-64" id="name" placeholder="输入你的姓名" type="text" />
    </div>
  );
}

RadioGroup

选择套餐选择最适合你的套餐
import {Description, Label, Radio, RadioGroup} from "@heroui/react";

export function Basic() {
  return (
    <RadioGroup defaultValue="premium" name="plan">

TextField

Component demo "text-field-basic" not found. Make sure the demo is registered in the demos index.

TextArea

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

export function Basic() {
  return (
    <TextArea

表单字段 token

引入 --field-* 表单字段 token,确保各表单组件之间样式保持一致。--field-* 变量的具体说明请参阅 主题

Storybook 重新组织

按类别重新组织了 Storybook,方便导航与组件查找。

Skeleton 动画 token

🚧 破坏性变更: 为了与其他组件 token 保持一致,Skeleton 中的 --skeleton-default-animation-type 已重命名为 --skeleton-animation

data-slot 对齐

我们统一了各组件的 data-slot 标识,使样式与定制更加一致。这项标准化让通过 CSS 选择器定位特定组件部件变得更容易,整体上也优化了自定义组件样式时的开发体验。

组件现在使用一致的 data-slot 属性,例如:

  • data-slot="base" —— 用于根元素
  • data-slot="label" —— 用于标签文本
  • data-slot="description" —— 用于描述文本
  • data-slot="error" —— 用于错误信息

这样在所有表单组件中都能用可预期的方式进行 CSS 定位:

.radio {
  [data-slot="label"] {
    /* Styles apply to radio labels */
  }
}

文档改进

组件文档

迁移指南

Skeleton 组件迁移

  1. 更新动画 token:
    • --skeleton-default-animation-type 替换为 --skeleton-animation

链接

贡献者

感谢每一位为本次发布做出贡献的开发者!

本页目录