본문 바로가기
vue.js/기술

[vue] provide / inject

by 냉면돈가스 2022. 1. 19.

컴포넌트 계층 구조가 굵어 여러 단계를 거쳐 props를 해야 하는 경우

매우 귀찮고 복잡해 질 수 있다.

그럴 때 provide / inject 를 사용


export default {
  name: 'Home',
  components: {
    About
  },
  provide () {
    return {
      provideDate: [1, 2, 3, 4, 5]
    }
  }
}

provide로 데이터를 뿌리고


export default {
  name: 'Children',
  inject: ['provideDate']
}

inject로 받아온다.

 

 


다만 위와 같이 사용했을 시 어느 부모컴퍼넌트에서 받아온 값인지 찾기 힘들 수 있다.

그래서 inject의 형태를 변경해 조금 더 상세한 설정이 가능함

 

 

//부모

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  },
  data() {
    return {
      provideData:[1,2,3,4,5]
    }
  },
  provide() {
    return {
      provideData: this.provideData
    }
  }
}
</script>

 

//자식

<template>
  <div class="hello">
    <h1>{{ injectData }}</h1>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  inject: {
    injectData: {
      from: 'provideData',
      default: 'injectData라는 값을 찾을 수 없음'
    }
  }
}
</script>

inject: {}의 안에 해당컴퍼넌트에서 선언할 데이터의 이름을 쓰고(injectData)

그 안의 from부분엔 부모컴퍼넌트에서 제공한 provide 값(injectData)을 쓰면 된다.

 

default부분은 생략해도되지만 만약 provideData라는 provide 값을 찾지 못했을시

injectData의 값은 자동적으로 default에 설정되어진 값이 대입된다.

 

 

 

 

'vue.js > 기술' 카테고리의 다른 글

[vue] $nextTick 사용하기  (0) 2022.03.16
[vue] emit을 props처럼 관리하기  (0) 2022.02.24
[vue] v-slot  (1) 2022.01.19
[vue] props  (0) 2022.01.19
[vue] vue 키 이벤트  (0) 2022.01.19

댓글