Skip to content

Sonner 消息提示

Sonner 组件是一个轻量级的消息提示组件,支持多种类型的提示(成功、错误、警告、信息),可以自定义位置、内容和样式,适用于各种交互反馈场景。

基础用法

Sonner 组件提供了多种使用方式,包括组件实例方法调用、全局 $toast 方法调用、组合式 API useToast() 以及直接导入的全局 toast 对象。

通过插件方法调用

自定义配置

操作方法

实际应用场景

不同类型的消息

Sonner 支持四种预设的消息类型:成功(success)、错误(error)、警告(warning)和信息(info),每种类型都有对应的图标和颜色。

Sonner 消息提示 - 不同类型

Sonner 提供多种消息类型和丰富的自定义选项,满足不同场景下的需求。点击下方按钮查看效果。

基本消息类型

每种类型的消息都有对应的图标和默认样式,可以根据场景选择合适的类型。

自定义样式

通过自定义选项可以控制消息的外观,包括大小、颜色等属性。

交互式消息

交互式消息可以包含操作按钮、链接等元素,提供更丰富的用户体验。

高级应用场景

结合不同功能,可以实现更复杂的交互场景。

自定义位置

可以通过设置 position 属性来改变消息提示的位置,支持多种位置选项。

Sonner 消息提示 - 自定义位置

Sonner 支持在屏幕的不同位置显示消息提示,可以根据应用场景选择合适的位置。

基本位置选项

点击按钮查看不同位置的消息效果,每个位置使用独立的 Sonner 实例。

位置组合演示

同时在所有位置显示不同类型的消息,展示多实例协同工作效果。

实时位置切换

top-right

选择位置后显示消息,可以直观比较不同位置的显示效果。

偏移量控制

偏移量:16px

调整消息距离屏幕边缘的偏移量,适用于需要避开其他固定元素的场景。

高级位置应用

结合实际业务场景,展示不同位置的应用策略。

简单调用方式

Sonner 消息提示 - 简单调用方式

Sonner 提供了更简洁的调用方式,包括组合式 API 和全局 toast 对象,让消息提示更加便捷易用。

使用组合式 API (useToast)

通过 useToast() 组合式 API 获取 toast 实例,然后调用相应的方法显示不同类型的消息。

使用全局 toast 对象

直接导入全局 toast 对象并调用其方法,适合在任何地方快速显示消息。

高级用法对比

对比不同调用方式的效果,包括详细配置选项的使用。

实际应用场景

在实际业务场景中使用不同的调用方式处理交互反馈。

自定义内容

除了基本的标题和描述,Sonner 还支持通过插槽自定义内容,以及设置各种样式选项。

Sonner Props

属性名类型默认值说明
positionstring'top-right'消息提示的位置,可选值:'top-right''top-left''bottom-right''bottom-left''top-center''bottom-center'
rtlbooleanfalse是否使用 RTL 布局
limitnumber3同时显示的最大消息数量
offsetnumber16消息提示框与屏幕边缘的偏移量
pauseOnHoverbooleantrue鼠标悬停时是否暂停自动关闭计时器
containerStyleRecord<string, string>{}容器的自定义样式

Toast 选项

使用 $toast.addToast() 方法时,可以传递以下选项:

选项名类型默认值说明
typestring'default'消息类型,可选值:'default''success''error''warning''info'
titlestring-消息标题
descriptionstring-消息描述
durationnumber5000消息显示的持续时间(毫秒),设置为 Infinity 可禁用自动关闭
dismissiblebooleantrue是否显示关闭按钮
iconstring-自定义图标名称
styleRecord<string, string>{}自定义样式
sizestring'default'消息大小,可选值:'small''default''large'
roundedbooleanfalse是否使用圆角样式
shadowbooleanfalse是否使用阴影效果
slotstring-自定义内容插槽名称

方法

Sonner 组件和 $toast 提供以下方法:

方法名参数返回值说明
addToastoptions: Omit<Toast, 'id'>number添加一个自定义消息,返回消息 ID
dismissToastid: numbervoid关闭指定 ID 的消息
dismissAll-void关闭所有消息
updateToastid: number, updates: Partial<Toast>void更新指定 ID 的消息
successmessage: string, title?: stringnumber显示成功消息
errormessage: string, title?: stringnumber显示错误消息
warningmessage: string, title?: stringnumber显示警告消息
infomessage: string, title?: stringnumber显示信息消息

安装和配置

在应用的入口文件中,通常是 main.jsmain.ts,你需要导入并使用 Sonner 组件:

javascript
import { createApp } from 'vue';
import App from './App.vue';
import Zui from './install';

const app = createApp(App);
app.use(Zui);
app.mount('#app');

然后在 App.vue 中添加 Sonner 组件:

vue
<template>
  <div class="app">
    <Sonner />
    <!-- 其他组件 -->
  </div>
</template>

访问方式

在 Vue 组件中,你可以通过以下方式访问 Sonner:

  1. 通过 this.$toast(在选项 API 中)
  2. 通过 inject('toast')(在组合 API 中)
  3. 通过直接导入的 useToast() 组合式 API
  4. 通过直接导入的全局 toast 对象

使用组合式 API

vue
<template>
  <Button @click="showSuccessToast">显示成功消息</Button>
</template>

<script setup>
import { useToast } from '../src/components/Sonner';

const toast = useToast();

const showSuccessToast = () => {
  toast.success('操作成功', '提示');
};
</script>

使用全局 toast 对象

vue
<template>
  <Button @click="showErrorToast">显示错误消息</Button>
</template>

<script setup>
import { toast } from '../src/components/Sonner';

const showErrorToast = () => {
  toast.error('操作失败', '错误');
};
</script>

响应式设计

Sonner 组件会根据屏幕宽度自动调整位置和大小,在移动设备上会自动适应屏幕宽度。