Provide and Inject
provide/inject passes values down a component lineage without prop drilling. This lesson covers practical patterns, syntax, and mistakes to avoid.
Dependency Injection in Vue
provide/inject passes values down a component lineage without prop drilling.
Good for theme/form controllers; use Pinia for app-wide business state.
const key = Symbol('form')
provide(key, formApi)
const formApi = inject(key)
Symbol keys avoid collisions.
Defaults
inject(key, defaultValue)
- Prefer Composition API + script setup.
- Use computed for derived UI.
- Keep side effects intentional.
- Practice in a small Vite app.
Provide and Inject Cheatsheet
Quick reference for patterns covered in this lesson.
| Item | Example | Purpose |
| provide | parent | Supply |
| inject | descendant | Read |
| Symbol | key | Safety |
| readonly | protect | API |
| app.provide | global | Plugin |
| vs pinia | scope | Choose |
Mutability
Provide readonly state + methods to control updates.
Common Mistakes
- String keys colliding.
- Using provide/inject for unrelated domains better suited to Pinia.
Key Takeaways
- Provide and Inject is important in Vue apps.
- Practice in SFCs.
- Prefer clear naming.
- Check Vue docs for details.
Pro Tip
Document provided APIs like mini libraries.