GPTの回答で後日に整理する予定です。
- lightning/platformShowToastEvent: いちばん基本。イベントを投げてトーストを表示する公式・推奨のやり方(標準ページ上のLWCならこれでOK)。
- lightning/toastContainer: トーストを描画する“受け皿”。グローバルのコンテナが無い環境(独自LWR/スタンドアロンなど)や、表示位置をコンポーネント内で制御したい時に自分で置く。
- lightning/toast: 単体トーストのベース要素(通常は直接使わない)。コンテナ内部で使われる下位コンポーネントで、一般的なLWCではShowToastEvent+(必要なら)toastContainerを使います。
使い分けの目安
- Salesforce標準のレコードページ/アプリページ上のLWC:
まずは lightning/platformShowToastEvent だけで十分(グローバルのトーストコンテナが自動で拾って表示)。 - 独自のDOM環境でグローバルコンテナが無い(例: スタンドアロンLWR、特殊な埋め込み):
親テンプレートに を1つ置く → その上で ShowToastEvent を dispatch。 - 表示位置やライフサイクルをローカルに完結させたい:
コンポーネントのテンプレートに を置いて、その影DOM内で完結させる。 - lightning/toast を直接使うケース:
ほぼ無し(コンテナが内部で使う要素)。通常は使わないのがベストプラクティス。
最小サンプル
- 標準ページ(これだけでOK)
JS import { ShowToastEvent } from 'lightning/platformShowToastEvent';
this.dispatchEvent( new ShowToastEvent(
{
title: '完了',
message: '保存しました',
variant: 'success', // success | info | warning | error
mode: 'dismissable' // dismissable | pester | sticky
}) );
- グローバルコンテナが無い/位置を制御したい
HTML(親テンプレートのどこかに1つ)
<lightning-toast-container></lightning-toast-container>
JS(呼び出しは同じでOK)
this.dispatchEvent(new ShowToastEvent({ title: '...', message: '...', variant: 'success' }));
よくある注意点
-
variant/mode の値は厳密(小文字・余分な空白NG)。不正値や未設定は info(灰色)にフォールバックします。
例: (value || '').trim().toLowerCase() で正規化してから渡すと安全。 -
すぐに Flow 終了/ナビゲーションを実行すると表示が崩れることがあります。トースト表示→数百ms遅延→終了/遷移が安定。
-
コンテナは影DOM単位で1つに。多重に置くと重複表示やスタイル競合の可能性。
-
Experience Cloud/モバイルではテーマにより色味が変わることがあります(期待色と見え方がずれる)。
まとめ -
基本は lightning/platformShowToastEvent。
-
必要なときだけ lightning/toastContainer をテンプレートに追加。
-
lightning/toast は原則使わない(内部実装向け)。
既存の toastInLightningFlow でも、すでに ShowToastEvent を使っているので正しい方向です。variant が灰色に落ちる場合は、「値の正規化」と「後続処理の遅延(~300ms)」を入れると安定します。詳しい堅牢化コードが必要なら、そのまま適用できる差分もお渡しできます