inject() Inject an Ancestor Dependency

Last updated: 2026-10-22

inject() Inject an Ancestor Dependency

inject() reads data provided by an ancestor, optionally falling back to a default.

GroupDependency Injection
KindAPI
ScopeComponent
Vue Version3.0+
SSR SupportYes

📝 Syntax

const theme = inject("theme")                 // undefined when missing
const theme = inject("theme", "light")        // default value
const theme = inject("theme", () => ref("light"))  // factory default (recommended)

⚙️ Arguments

keyThe key matching a provide call
defaultValueOptional default; pass a factory to avoid shared instances

Returns:The injected value, or the default/undefined

▶ Example

Edit the code below and see the live result:

Output:

Without a provider it shows 'Theme: light by default'.

💡 Key Points

⚠️ Warning Do not pass object literals as defaults — they are shared; use a factory.
💡 Tip Injected refs stay reactive; templates unwrap them, scripts use .value.
ℹ️ Note Callable only during setup or inside composables, synchronously.
More case studies coming soon.

📚 Related Tutorials

❓ FAQ

Q Does a missing provider throw?
A No — it returns undefined with a dev hint; defaults are safer.
Q Can injected writes affect the ancestor?
A It is the same reference, so writes propagate — usually undesirable.
Q Why a factory default?
A Each call gets a fresh instance, preventing shared-state bugs.
Web-Tutorial.com

Web-Tutorial Tech Team

A team of developers maintaining programming tutorials. Each tutorial is written and reviewed by developers with expertise in that field. We work to keep our content accurate and reliable — if you spot an issue, please let us know.

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏