onScopeDispose() スコープ破棄時のコールバックを登録する
最終更新:2026-10-22
onScopeDispose() スコープ破棄時のコールバックを登録する
onScopeDispose() は現在のスコープが停止するときにクリーンアップを実行します。コンポーザブル内でグローバルリスナーやタイマーの解除に使います。
| グループ | リアクティビティ: 応用 |
|---|---|
| 種類 | API |
| スコープ | コンポーネント内 |
| Vue バージョン | 3.0+ |
| SSR 対応 | 対応 |
📝 構文
onScopeDispose(() => {
window.removeEventListener('resize', onResize)
})
⚙️ 引数
| fn | クリーンアップ関数(複数回登録できます) |
|---|---|
| failSilently | true の場合、アクティブなスコープがなくてもエラーにしません(3.5+) |
戻り値:なし
▶ 例
以下のコードを編集して結果を確認しましょう:
出力:
Shows the current window width, updating as you resize.
💡 ポイント
ℹ️ 補足 onUnmounted との違いは、コンポーネントのアンマウントだけでなく任意のスコープ(effectScope を含む)に紐づく点です。
💡 ヒント コンポーザブルではこちらを優先しましょう。ユーザーが effectScope 内で呼んでも正しくクリーンアップされます。
⚠️ 注意 アクティブなスコープ内で同期的に呼ぶ必要があります。非同期コールバック内で呼ぶとエラーになります。
🏷️ 関連応用
💡 関連ケース
関連ケースは近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q onScopeDispose と onUnmounted、どちらを使うべきですか?
A コンポーネントに書くなら onUnmounted、再利用する関数に書くならより汎用的な onScopeDispose を使います。
Q 複数のクリーンアップ関数を登録できますか?
A 登録できます。登録した順番に実行されます。
Q アクティブなスコープがないとどうなりますか?
A 警告が出ます。3.5 以降は第 2 引数 failSilently で黙らせられます。