νμ μ»΄ν¬λνΈ νλͺ©μ λ°μ΄ν°λ₯Ό μ 곡νλ €λ©΄ provider μν μ νλ μμ μ»΄ν¬λνΈ
setup()
ν¨μ λ΄λΆμ μΈ μ μλ€.
<script>
import { provide } from 'vue';
export default {
setup(){
provide('message', 'hello!')
},
};
</script>
provide()
ν¨μλ λ κ°μ νλΌλ―Έν°λ₯Ό λ°λλ€.
λ¬Έμμ΄
λλ Symbol
μ΄ λ μ μλ€. μ£Όμ
ν€λ νμ μ»΄ν¬λνΈμμ μ£Όμ
λ κ°μ μ‘°ννλλ° μ¬μ©λλ€.Provide / Injectλ₯Ό λ°μμ± λ°μ΄ν°λ‘ μ 곡ν λ κ°λ₯ν λͺ¨λ λ³κ²½μ provider λ΄λΆμμ νλ κ²μ΄ μ’λ€. μ΄λ κ² Provider λ΄λΆμ λ°°μΉλλ©΄ ν₯ν μ μ§κ΄λ¦¬κ° μ©μ΄νλ€.
λ§μ½μ Injector λ΄λΆ μ»΄ν¬λνΈμμ λ°μμ± λ°μ΄ν°λ₯Ό λ³κ²½ν΄μΌ νλ κ²½μ° λ°μ΄ν° λ³κ²½μ μ 곡νλ ν¨μλ₯Ό ν¨κ» μ 곡νλ κ²μ΄ μ’λ€.
<script>
// Provider
const message = ref('Hi two');
const updateMessage = () => {
message.value = 'world!';
};
provide('message', {message, updateMessage});
</script>
<script>
// Injector
const { message, updateMessage } = inject('message');
κ·Έλ¦¬κ³ μ£Όμ
λ μ»΄ν¬λνΈμμ μ 곡λ κ°μ λ³κ²½ν μ μλλ‘ νλ €λ©΄ readonly()
ν¨μλ₯Ό μ¬μ©ν μ μλ€.
<script>
import { provide, readonly, ref } from 'vue';
provide('count', readonly(count));
</script>
λκ·λͺ¨ μ ν리μΌμ΄μ μμ λ€λ₯Έ κ°λ°μμ ν¨κ» μμ ν λ μ μ¬μ μΆ©λμ νΌνκΈ° μν΄ Symbol μ£Όμ ν€λ₯Ό μ¬μ©νλ κ²μ΄ κ°μ₯ μ’λ€.
<script>
// keys.js
export const myInjectionKey = Symbol()
</script>
<script>
// in provider component
import { provide } from 'vue'
import { myInjectionKey } from './keys.js'
provide(myInjectionKey, {
/* data to provide */
})
</script>
<script>
// in injector component
import { inject } from 'vue'
import { myInjectionKey } from './keys.js'
const injected = inject(myInjectionKey)
</script>
μ»΄ν¬λνΈμμ λ°μ΄ν°λ₯Ό μ 곡νλ κ² μΈμ App-levelμμ μ 곡ν μλ μλ€.
<script>
import { createApp } from 'vue';
import App from './App.vue'
const app = createApp(App);
app.provide('appMessage', 'hello app message')
app.mount('#app');
</script>
App-levelμμμ Provideλ μ±μμ λ λλ§λλ λͺ¨λ μ»΄ν¬λνΈμμ μ¬μ©ν μ μλ€. μ΄κ²μ Pluginμ μμ±ν λ μ μ©ν©λλ€. Vue2μμ μ»΄ν¬λνΈ μΈμ€ν΄μ€ κ°μ²΄λ₯Ό μΆκ°ν λ global propertyμ μΆκ° νμΌλ, Vue3μμ Composition API setup ν¨μμμλ μ»΄ν¬λνΈ μΈμ€ν΄μ€μ μ κ·Όν μ μλ€. μ΄λ λμ νμ¬ Provide / Injectλ₯Ό μ¬μ©ν μ μλ€.