watch() リアクティブなデータの変化を監視する
最終更新:2026-10-22
watch() リアクティブなデータの変化を監視する
watch() は 1 つ以上のリアクティブなソースを監視し、変化があったときに新旧の値とともにコールバックを実行します。副作用を伴うリアクティブなロジックに適しています。
| グループ | リアクティビティ: 基本 |
|---|---|
| 種類 | API |
| スコープ | コンポーネント内 |
| Vue バージョン | 3.0+ |
| SSR 対応 | 対応 |
📝 構文
watch(source, (newVal, oldVal) => { ... }, { immediate: true, deep: true })
// 複数のソースを監視
watch([count, keyword], ([c, k], [oc, ok]) => { ... })
⚙️ 引数
| source | ref / getter 関数 / リアクティブなオブジェクト / 配列 |
|---|---|
| callback | (newValue, oldValue, onCleanup) => void |
| options | immediate(即時実行)/ deep(深い監視)/ flush(pre|post|sync) |
戻り値:監視を停止する関数 stop()
▶ 例
以下のコードを編集して結果を確認しましょう:
出力:
Editing the input shows 'old → new', e.g. '10 → 12'.
💡 ポイント
💡 ヒント デフォルトは遅延実行です。初回にも実行したい場合は immediate: true を追加します。
⚠️ 注意 deep: true は大きなオブジェクトを再帰的に走査するためパフォーマンスコストが大きくなります。特定のフィールドを監視するなら getter(() => obj.a)のほうが精密です。
⚠️ 注意 非同期の副作用(リクエストなど)は onCleanup / onWatcherCleanup で古いリクエストをキャンセルしましょう。放置するとレスポンスの順序が崩れます。
🏷️ 関連基本
💡 関連ケース
関連ケースは近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q watch と computed にはどんな違いがありますか?
A computed はデータから値を導出します(戻り値があり、キャッシュされる)。watch は変化に応じて副作用(リクエスト送信、DOM 操作、ローカル保存など)を実行し、値を返しません。
Q watch で最初の 1 回を実行するには?
A { immediate: true } を渡します。setup のタイミングで 1 回実行され、そのとき oldValue は undefined になります。
Q watch で複数のデータを監視できますか?
A できます。配列を渡します:watch([a, b], ([newA, newB]) => ...)。