provide() 子孫に依存を提供する

最終更新:2026-10-22

provide() 子孫に依存を提供する

provide() は祖先コンポーネントからデータを提供し、どの階層の子孫でも inject で受け取れます。props を毎階層バケツリレーする必要がありません。

グループ依存性の注入
種類API
スコープコンポーネント内
Vue バージョン3.0+
SSR 対応対応

📝 構文

provide("theme", ref("dark"))
provide("config", readonly(config))   // おすすめ:読み取り専用で提供する

⚙️ 引数

key文字列または Symbol の依存キー
value任意の値(ref やリアクティブなオブジェクトはリアクティブ性を保てます)

戻り値:なし

▶ 例

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

出力:

The child shows 'Injected theme: dark'.

💡 ポイント

💡 ヒント ref / reactive のデータを提供すれば子孫でもリアクティブ性が保たれます。普通の値を渡すと一回きりのスナップショットになります。
⚠️ 注意 readonly を組み合わせて提供するのがおすすめです。書き込み可能な状態をそのまま晒すと、どの子孫でも祖先のデータを変更できてしまいます。
ℹ️ 補足 キー名は Symbol 定数にすると名前の衝突を避けられます(大きなプロジェクトやライブラリで推奨)。
関連ケースは近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q props との違いは何ですか?
A props は階層ごとに明示的に渡します。provide / inject は階層を越えて直接届きますが、データの出所が props ほど分かりにくいため、テーマや設定のようなグローバルな文脈に向いています。
Q provide したデータは変更できてしまいますか?
A できます(子孫は参照を受け取るので)。そのため、readonly を提供するか、変更用の関数を提供するのがおすすめです。
Q 同じ名前のキーは衝突しますか?
A 一番近い提供者が優先されます。Symbol キーを使えば衝突を完全に避けられます。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%