Skip to content

Toast 组件概述

Toast 用于在页面中以临时浮层的形式向用户提供操作反馈或事件提示,支持自动关闭、拖拽关闭、Promise 集成等高级交互。


安装

bash
npm install @heroui/toast
# 或
yarn add @heroui/toast
# pnpm / bun 同理

若已全局安装 @heroui/react,此步可跳过。


引入

tsx
import { ToastProvider, addToast, closeAll, Toast } from '@heroui/toast'
  • ToastProvider:初始化上下文,必须在根组件包裹后才可使用 addToast
  • addToast(options):新增一条 Toast;
  • closeAll():关闭所有当前可见的 Toast;
  • <Toast />:底层组件,通常无需手动使用。

基本使用

tsx
<ToastProvider maxVisibleToasts={3} placement="bottom-right">
  <Button
    onPress={() => {
      addToast({
        title: '操作成功',
        description: '文件已上传',
        color: 'success',
      })
    }}
  >
    显示 Toast
  </Button>
</ToastProvider>
  • maxVisibleToasts(默认 3):最多同时显示的 Toast 数量;
  • placement(默认 "bottom-right"):Toast 出现的位置。

API 详情

ToastProviderProps

属性类型默认值说明
maxVisibleToastsnumber3最大可见 Toast 数
placement"bottom-right" | ... | "top-center""bottom-right"出现位置
disableAnimationbooleanfalse是否禁用动画
toastOffsetnumber0与视口边缘的偏移量(px)
toastPropsToastProps传递给所有 Toast 的全局 Prop
regionPropsToastRegionProps自定义 ToastRegion 属性

来源:toast-provider.tsx


核心函数

  • addToast(opts: ToastProps & ToastOptions): void
  • closeAll(): void

    来源:toast-provider.tsx


ToastProps

属性类型默认值说明
titleReactNode标题
descriptionReactNode描述文字
color"default" | "primary" | ... | "danger""default"颜色主题
severitycolor"default"严重性,用于自动映射默认图标
variant"solid" | "bordered" | "flat""flat"视觉风格
radius"none" | "sm" | ... | "full""md"圆角
timeoutnumber6000自动关闭时间(ms)
shouldShowTimeoutProgressbooleanfalse是否显示自动关闭进度条
promisePromise<any>若传入 Promise,完成后自动关闭
icon, loadingIconReactNode自定义主图标 / 加载图标
closeIconReactNode自定义关闭按钮图标
endContentReactNode右侧额外内容
hideIcon, hideCloseButtonbooleanfalse隐藏图标 / 隐藏关闭按钮
onClose() => void关闭回调
classNamesPartial<Record<ToastSlots, string>>按 slot 自定义 CSS 类

来源:文档与源码


ToastRegionProps

属性类型默认值说明
classNamestring根节点自定义类名
classNamesPartial<Record<"base", string>>仅支持 base slot

来源:toast-region.tsx


数据属性(Data Attributes)

  • data-has-title:是否有标题
  • data-has-description:是否有描述
  • data-animation:当前动画状态 (entering/queued/exiting/undefined)
  • data-placement:位置标识
  • data-drag-value:拖拽偏移值

    来源:文档


Slot 列表

  • base / title / description / icon / loadingIcon
  • content / motionDiv / progressTrack / progressIndicator
  • closeButton / closeIcon

    来源:文档


可访问性

  • <div role="alert">
  • 所有 Toast 渲染于 ToastRegion,当无 Toast 时该区域自动从 DOM 移除
  • 关闭按钮默认 aria-label="Close"

    来源:文档


示例汇总

  1. 基本示例
    tsx
    <ToastProvider>
      <Button onPress={() => addToast({ title: '提示', description: '操作完成' })}>
        显示 Toast
      </Button>
    </ToastProvider>
  2. Promise 支持:自动展示加载中图标,3s 后关闭
    tsx
    addToast({
      title: '上传中',
      promise: uploadFile(),
      timeout: 3000,
      shouldShowTimeoutProgress: true,
    })
  3. 自定义样式 & 额外内容
    tsx
    addToast({
      title: '升级提示',
      endContent: <Button size="sm">升级</Button>,
      classNames: { base: 'bg-background border-l-4 border-warning' },
      color: 'warning',
    })