shallowReactive() 浅いリアクティブオブジェクト

最終更新:2026-10-22

shallowReactive() 浅いリアクティブオブジェクト

shallowReactive() はオブジェクトの第一階層のプロパティだけをリアクティブにします。ネストされたオブジェクトはプロキシ化されません。

グループリアクティビティ: 応用
種類API
スコープコンポーネント内
Vue バージョン3.0+
SSR 対応対応

📝 構文

const state = shallowReactive({ count: 0, nested: { a: 1 } })
state.count++         // ✅ 発火する
state.nested.a++      // ❌ 発火しない

⚙️ 引数

targetオブジェクト(自身のプロパティのみプロキシ化)

戻り値:浅いリアクティブなプロキシ

▶ 例

以下のコードを編集して結果を確認しましょう:

出力:

The top-level button updates the number; the nested one changes data without refreshing the view.

💡 ポイント

ℹ️ 補足 shallowRef と同じような使い所です。第一階層だけリアクティブにできればよい大きな状態構造に向いています。
⚠️ 注意 ビューが更新されない=データが変わっていない、ではない点に注意。ネストしたデータは実際には変わっていても描画がトリガーされない、という落とし穴になりがちです。
関連ケースは近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q reactive との違いは性能だけですか?
A いいえ。ネストした状態がリアクティブでなくなるという挙動の違いもあり、単なる最適化スイッチではなく意味的な違いです。
Q ネストされたオブジェクトは監視できますか?
A 元のオブジェクトを明示的に deep 監視するか、ref で深くラップする必要があります。
Q なぜこの API が存在するのですか?
A 大きなデータや外部データに対して、再帰的なプロキシ化のコストをかけない低オーバーヘッドなリアクティブな外殻を提供するためです。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%