Skip to content

Toast 轻提示 - Vant 4

Toast トースト

🎯 紹介

Toast はアプリの小さな妖精のような存在です。画面中央にそっと現れ、半透明のブラックで各種情報を上品に伝えます。成功の喜び、失敗の通知、読み込み中の待機など、ユーザーを妨げずに役目を果たし、スマートに消えます。

📦 取り込み

以下の方法でコンポーネントをグローバル登録します。詳細はコンポーネント登録を参照してください。

js
import { createApp } from 'vue';
import { Toast } from 'vant';

const app = createApp();
app.use(Toast);

🚀 関数呼び出し

開発体験をよりスムーズにするため、Vant は便利な補助関数群を提供します。これらの関数でグローバルな Toast を簡単に呼び出せます。

例えば showToast を使えば、1 行で美しいトーストを表示できます。

js
import { showToast } from 'vant';

showToast('操作成功!');

🎨 コード例

📝 テキストトースト

最も基本でよく使われる機能です。showToast で画面中央に簡潔なテキストを表示し、結果を素早く伝えます。

js
import { showToast } from 'vant';

// シンプルなテキストトースト
showToast('保存成功');
// => 保存に成功しました

// やや長めのテキスト
showToast('設定は保存され、次回起動時に有効になります');

// 複数行テキスト
showToast('1 行目の内容\n2 行目の内容\n3 行目の内容');

// 表示時間をカスタマイズ
showToast({
  message: 'このメッセージは 5 秒間表示されます',
  duration: 5000
});

⏳ ローディングトースト

showLoadingToast で読み込み中のトーストを表示します。forbidClick で背景クリックを無効化し、処理中の誤操作を防ぎます。

js
import { showLoadingToast, closeToast } from 'vant';

// 基本的なローディング
showLoadingToast({
  message: '読み込み中...',
  forbidClick: true,
});

// テキストなしのローディング
showLoadingToast({
  forbidClick: true,
  duration: 0, // 不自动关闭
});

// 擬似的な非同期処理
showLoadingToast({
  message: 'データを送信中...',
  forbidClick: true,
  duration: 0,
});

// 3 秒後に閉じる
setTimeout(() => {
  closeToast();
}, 3000);

✅ 成功/失敗トースト

showSuccessToast で成功、showFailToast で失敗を表示し、結果を直感的に伝えます。

js
import { showSuccessToast, showFailToast } from 'vant';

// 成功トースト
showSuccessToast('操作成功');
showSuccessToast({
  message: '数据保存成功!',
  duration: 3000
});

// 失敗トースト
showFailToast('操作失败');
showFailToast({
  message: 'ネットワーク接続に失敗しました。再試行してください',
  duration: 4000
});

🎨 カスタムアイコン

icon オプションでアイコンをカスタマイズできます。アイコン名や画像 URL を指定可能です。

js
import { showToast, showLoadingToast } from 'vant';

// 既存アイコンを使用
showToast({
  message: 'いいねしました',
  icon: 'like-o',
});

// カスタム画像を使用
showToast({
  message: 'ブランドの通知',
  icon: 'https://fastly.jsdelivr.net/npm/@vant/assets/logo.png',
});

// アイコンサイズを指定
showToast({
  message: '大きなアイコンの通知',
  icon: 'star-o',
  iconSize: '48px'
});

// ローディングアイコンの種類を指定
showLoadingToast({
  message: '読み込み中...',
  forbidClick: true,
  loadingType: 'spinner', // 使用 spinner 样式
});

📍 表示位置のカスタマイズ

Toast はデフォルトで中央に表示されます。position 属性で表示位置を制御できます。

js
import { showToast } from 'vant';

// 上部表示 - ステータス通知に適する
showToast({
  message: '新着メッセージのお知らせ',
  position: 'top',
});

// 下部表示 - 操作フィードバックに適する
showToast({
  message: '操作が完了しました',
  position: 'bottom',
});

// 中央表示(デフォルト)- 重要な通知に適する
showToast({
  message: '重要なお知らせ',
  position: 'middle',
});

📄 テキストの折り返し方式

wordBreak オプションで長文の折り返し方式を制御し、より上品に表示します。

js
import { showToast } from 'vant';

// 単語を分割して改行(デフォルト)
showToast({
  message: 'This message will contain a incomprehensibilities long word.',
  wordBreak: 'break-all',
});

// 単語を分割しない - 単語の整合性を保持
showToast({
  message: 'This message will contain a incomprehensibilities long word.',
  wordBreak: 'break-word',
});

// 通常の改行 - スペースでのみ改行
showToast({
  message: 'This is a normal text wrapping example with multiple words.',
  wordBreak: 'normal',
});

🔄 動的更新トースト

Toast の呼び出しはインスタンスを返します。インスタンスの message を更新して動的に内容を変更できます。進捗表示に最適です。

js
import { showLoadingToast, closeToast, showSuccessToast } from 'vant';

// カウントダウン例
const toast = showLoadingToast({
  duration: 0,
  forbidClick: true,
  message: 'カウントダウン 3 秒',
});

let second = 3;
const timer = setInterval(() => {
  second--;
  if (second) {
    toast.message = `カウントダウン ${second} 秒`;
  } else {
    clearInterval(timer);
    closeToast();
    showSuccessToast('カウントダウン終了!');
  }
}, 1000);

// アップロード進捗例
const uploadToast = showLoadingToast({
  duration: 0,
  forbidClick: true,
  message: 'アップロード中 0%',
});

// 擬似的なアップロード進捗
let progress = 0;
const uploadTimer = setInterval(() => {
  progress += 10;
  if (progress <= 100) {
    uploadToast.message = `アップロード中 ${progress}%`;
  }
  if (progress >= 100) {
    clearInterval(uploadTimer);
    closeToast();
    showSuccessToast('アップロード完了!');
  }
}, 200);

🔗 シングルトンモード

Toast はデフォルトでシングルトンです。複数同時表示が必要な場合はマルチインスタンスモードを有効化します。

js
import { showToast, showSuccessToast, allowMultipleToast } from 'vant';

// マルチインスタンスを有効化
allowMultipleToast();

// 同時に複数の Toast を表示可能
const toast1 = showToast('1 つ目の Toast');
const toast2 = showSuccessToast('2 つ目の Toast');

// 特定の Toast を手動で閉じる
setTimeout(() => {
  toast1.close();
}, 2000);

setTimeout(() => {
  toast2.close();
}, 3000);

// 実用例:異なる種類のトーストを同時表示
showToast({
  message: 'バックグラウンドでデータ同期中...',
  position: 'top',
  duration: 0
});

showSuccessToast({
  message: '操作は成功しました',
  position: 'bottom'
});

デフォルト設定の変更

setToastDefaultOptionsshowToast などのデフォルト設定をグローバルに変更できます。

js
import { setToastDefaultOptions, resetToastDefaultOptions } from'vant'; setToastDefaultOptions({ duration: 2000 }); setToastDefaultOptions('loading', { forbidClick: true }); resetToastDefaultOptions(); resetToastDefaultOptions('loading');

Toast コンポーネントの使用

Toast 内にコンポーネントや任意の内容を埋め込みたい場合は、Toast コンポーネントを直接使用し、message スロットでカスタマイズします。使用前に app.use で登録してください。

html
js
import { ref } from'vue'; exportdefault { setup() { const show = ref(false); return { show }; }, };

API

🛠️ メソッド

Vant は以下の Toast 関連の補助関数を提供します:

メソッド名説明引数戻り値
showToast 📝テキストトーストを表示ToastOptions | stringToast インスタンス
showLoadingToast ⏳ローディングトーストを表示ToastOptions | stringToast インスタンス
showSuccessToast ✅成功トーストを表示ToastOptions | stringToast インスタンス
showFailToast ❌失敗トーストを表示ToastOptions | stringToast インスタンス
closeToast 🔒現在のトーストを閉じるcloseAll: booleanvoid
allowMultipleToast 🔗複数トーストの同時表示を許可-void
setToastDefaultOptions ⚙️デフォルト設定を変更type | ToastOptionsvoid
resetToastDefaultOptions 🔄デフォルト設定をリセットtypevoid

📋 ToastOptions のデータ構造

showToast などの呼び出し時に、以下のオプションを渡せます:

パラメータ説明デフォルト
type 🎯提示类型 - 决定 Toast 的展示样式ToastTypetext
position 📍位置 - 控制 Toast 在屏幕中的显示位置ToastPositionmiddle
message 📝文本内容 - 支持通过 \n 换行string''
wordBreak 📄文本换行方式 - 控制长文本的显示效果ToastWordBreak'break-all'
icon 🎨自定义图标 - 支持图标名称或图片链接string-
iconSize 📏图标大小 - 如 20px2emnumber | string36px
iconPrefix 🏷️图标类名前缀 - 自定义图标库前缀stringvan-icon
overlay 🎭是否显示背景遮罩层 - 增强视觉焦点booleanfalse
forbidClick 🚫是否禁止背景点击 - 防止误操作booleanfalse
closeOnClick 👆是否在点击后关闭 - 快速关闭方式booleanfalse
closeOnClickOverlay 🎭是否在点击遮罩层后关闭 - 遮罩交互booleanfalse
loadingType ⏳加载图标类型 - circularspinnerstringcircular
duration ⏰展示时长(ms) - 0 表示不自动关闭number2000
className 🎨自定义类名 - 个性化样式定制string | Array | object-
overlayClass 🎭自定义遮罩层类名 - 遮罩样式定制string | Array | object-
overlayStyle 🎨自定义遮罩层样式 - 遮罩样式对象object-
transition 🎬动画类名 - 自定义进出场动画stringvan-fade
teleport 🚀指定挂载节点 - 控制渲染位置string | Elementbody
z-index 📚层级设置 - 控制显示优先级number | string2000+
onClose 🔚关闭时的回调函数 - 关闭事件处理Function-
onOpened 🎉完全展示后的回调函数 - 显示完成事件Function-

⚙️ Props

コンポーネントとして Toast を使用する際にサポートされる Props:

パラメータ説明デフォルト
type種類(loading``success``fail``htmlToastTypetext
position表示位置(top``bottomToastPositionmiddle
messageテキスト内容(\n で改行可)string''
word-break改行方式(normal``break-all``break-wordToastWordBreak'break-all'
iconカスタムアイコン(アイコン名または画像 URL。Icon の name 相当)string-

| icon-size | アイコンサイズ(例 20px``2em。デフォルト単位は px) | number | string | 36px | | icon-prefix | アイコンクラス接頭辞(Icon の class-prefix 相当) | string | van-icon |

| overlay | 背景オーバーレイを表示 | boolean | false | | forbid-click | 背景のクリックを禁止 | boolean | false | | close-on-click | クリックで閉じる | boolean | false | | close-on-click-overlay | オーバーレイクリックで閉じる | boolean | false | | loading-type | ローディングアイコン種類(spinner) | string | circular |

| duration | 表示時間(ms)。0 の場合は自動で消えない | number | 2000 | | class-name | カスタムクラス名 | string | Array | object | - | | overlay-class | オーバーレイのクラス名 | string | Array | object | - | | overlay-style | オーバーレイのスタイル | object | - | | transition | アニメーション名(transitionname) | string | van-fade |

| teleport | マウント先(Teleport の to) | string | Element | body |

| z-index | 固定の z-index を設定 | number | string | 2000+ |

🎯 Events

コンポーネントとして Toast を使用する際にサポートされるイベント:

イベント名説明コールバック引数
close 🔚閉じたときのコールバック-
opened 🎉完全表示後のコールバック-

🎨 Slots

Toast コンポーネント使用時にサポートされるスロット:

名前説明
message 📝メッセージ内容のカスタマイズ(複雑な構造可)

📝 型定義

组件导出以下类型定义:

ts
import type {
  ToastType,
  ToastProps,
  ToastOptions,
  ToastPosition,
  ToastWordBreak,
  ToastWrapperInstance,
} from 'vant';

🎨 テーマカスタマイズ

🎯 スタイル変数

以下の CSS 変数でスタイルをカスタマイズできます。使用方法は ConfigProvider コンポーネント を参照してください。

名称デフォルト説明
--van-toast-max-width70%-
--van-toast-font-sizevar(--van-font-size-md)-
--van-toast-text-colorvar(--van-white)-
--van-toast-loading-icon-colorvar(--van-white)-
--van-toast-line-heightvar(--van-line-height-md)-
--van-toast-radiusvar(--van-radius-lg)-
--van-toast-backgroundfade(var(--van-black), 70%)-
--van-toast-icon-size36px-
--van-toast-text-min-width96px-
--van-toast-text-paddingvar(--van-padding-xs) var(--van-padding-sm)-
--van-toast-default-paddingvar(--van-padding-md)-
--van-toast-default-width88px-
--van-toast-default-min-height88px-
--van-toast-position-top-distance20%-
--van-toast-position-bottom-distance20%-

❓ よくある質問

🚨 showToast をインポートするとビルドエラー?

showToast のインポート時に以下のエラーが出る場合、babel-plugin-import を使用していることが原因です。

bash
These dependencies were not found: 
* vant/es/show-toast in ./src/xxx.js 
* vant/es/show-toast/style in ./src/xxx.js

Vant 4.0 以降は babel-plugin-import をサポートしません。移行ガイド を参照して削除してください。

🎨 コンポーネントを個別導入時、showToast でスタイルが崩れる?

個別導入 で Vant を統合する場合、showToast などを明示的にインポートする必要はありません。インポートするとスタイル欠落が発生します。

js
// 以下方式是不需要的
import { showToast } from 'vant'

showToast などを明示的にインポートすると、@vant/auto-import-resolver が Toast のスタイルを自動取込しないため、スタイルが欠落します。

解決策は 2 つあります:

  • showToast の明示的なインポートを行わない
  • どうしてもインポートする場合は、Toast のスタイルも手動でインポートする
js
import { showToast } from 'vant'
import 'vant/lib/toast/style'

関連ドキュメント 📚

🎯 コアコンポーネント

🔧 補助コンポーネント

⚡ 上級機能

Vant に基づく企業向けモバイルソリューション