watchSyncEffect() 同期的に実行される副作用
最終更新:2026-10-22
watchSyncEffect() 同期的に実行される副作用
watchSyncEffect() は watchEffect に flush: 'sync' を付けたものと同等です。依存が変わるとバッチ処理を経ずに即座に同期的に実行されます。
| グループ | リアクティビティ: 基本 |
|---|---|
| 種類 | API |
| スコープ | コンポーネント内 |
| Vue バージョン | 3.0+ |
| SSR 対応 | 対応 |
📝 構文
watchSyncEffect(() => {
console.log('即座に実行', count.value)
})
⚙️ 引数
| effect | 副作用関数。オプションは watchEffect と同じ(flush は除く) |
|---|
戻り値:監視を停止する関数 stop()
▶ 例
以下のコードを編集して結果を確認しましょう:
出力:
A +2 click logs twice (e.g. '2 2'); with default flush you would see the final value once.
💡 ポイント
⚠️ 注意 同期的に実行するとバッチ処理がスキップされるため、高頻度で変化する場面ではパフォーマンスリスクが顕著です。毎回の変化を正確に捉える必要がある場合のみ使いましょう。
ℹ️ 補足 典型的な用途:デバッグのトレースや、変化を厳密に順序どおり記録したい場面です。
💡 ヒント watch(デフォルトの pre)+ nextTick で解決できる場合は、sync を使わないようにしましょう。
🏷️ 関連基本
💡 関連ケース
関連ケースは近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q sync モードとデフォルトモードの違いは何ですか?
A デフォルトは同じタイミング内の複数の変更を 1 回の実行にまとめます。sync は変更のたびに即座に 1 回実行します。
Q パフォーマンス問題が起きやすくなりますか?
A はい。代入のたびに同期的に副作用が走るため、ループ内で変更するとコストが線形に増大します。
Q 新旧の値は取得できますか?
A 取得できません。watchEffect 系です。新旧の値が必要な場合は watch に flush: 'sync' を付けてください。