\n\n\n```\n\n**자식컴포넌트**\n\n```\n\n\n\n```\n\n**손자컴포넌트**\n\n```\n\n\n\n```\n\n**실제 사용 사례**\n\n![eg](/storage/1716021931.jpg)\n\n---\n\n참조\n\n[실제예제](https://play.vuejs.org/#eNp9Uk1r20AQ/SuLLk7AsQ7tyTiBNoTSQj9oe9RFlde2HGkltCvVYARpcYuxU+qCVbvghBT6kUIKIXHAUPcPWav/0FlJluM68W1n3pvZN2+mKd2z7YLnYqkolajm6DZDFDPX3lGIbtqWw1ATObiSR7ZjeXoZIx9VHMtEOajJZZzdmm6UU6Agx5FoCgSFyLJoEH6fIn4yml1eRcEpH03DryP+4RTx9z1+3ON/xtHHs7B1GHUmYacf1/DB2WxyzlsjxI+m/PM4fDsECIWXB9GXPh/0UHg+5EefouAE8fYQ8eM271yF3XbY/VZQiGYRypCJKVWrGG0LBRs5HrTDd0FuUyHpMBu5lJHLz7kAluTECLAAAoZN21AZhgihkk5slyFvy7TK2NhWpLRKkRI48UGGoCRnhVJeyhy53eYHjkrKyz4uUqmZ65Rdq1/9f7nTul3rpI419t+WV/1MaAv/wLaKSzSmWwRpNZVU8eME2dhsCnkpr+CphovBt+jNOPzxOwrGYsHhrz5vTfjPA7Hd2cVfRVKIv35ae2d+OoPe7OIQTqsVBcmBQLPuCJoVUbOZKfZ9VJLFoFD7ymUMZHpbFilqhq7tg54lzbDN1buEj27SWpKTdiuWMwqeVfRqoU4tAo7HNsBHlmnrBnae2sIrqkggUyACUw3Dev0ozjHHxfl5Xqthbf+GfJ02RE6RnjmYYscD4RnGVKeKWQLvvXiCG/DOQLhe1wD2GvA5ppbhCo0J7b5LyiD7Gi9W+zC+G51UX9K9BsOEzocSQgXTj/mKBIe0u2b0hdw7hbtxHZyA5P8DLoXZlA==)\n\n[공식문서](https://ko.vuejs.org/guide/components/provide-inject.html#provide)\n","publisher":{"@type":"Organization","name":"WallyLog"}}
vuejs

Provide(제공) / Inject(주입)

eg( 사진으로 보면 한눈에 알수있다. 데이터를 특정 컴포넌트까지 바로 전달가능하다 )

  • 부모템플릿에서 자식의 자식의 자식까지 전달할 props를 불필요하게 설정할 필요가 없음 (진작 알았다면..)

  • 반응성을 가진 변수를 전달시 전달 받은 후에도 그대로 반응성을 가짐

부모 템플릿

<script setup>
import { ref, provide } from 'vue'
import Child from './Child.vue'

// ref를 제공함으로써 손자컴포넌트는
// 여기서 일어나는 변화에 반응할 수 있습니다.
const message = ref('안녕')
provide('message', message)
</script>

<template>
  <input v-model="message">
  <Child />
</template>

자식컴포넌트

<script setup>
import GrandChild from './GrandChild.vue'
</script>

<template>
  <GrandChild />
</template>

손자컴포넌트

<script setup>
import { inject } from 'vue'

const message = inject('message')
function changeMessage(){
  message.value="클릭해서 메세지 변경했어요"
}
</script>

<template>
  <p> 손자에게 전하는 메시지: {{ message }} </p>
  <button v-on:click="changeMessage">손자컴포넌트에서 메세지 변경</button>
</template>

실제 사용 사례

eg


참조

실제예제

공식문서