본문 바로가기
Dev/✅ Vue.js

[Vue.js] props & emit 사용 가이드

by 아아덕후 2023. 3. 16.
반응형

props : 부모(상위) 컴포넌트에서 호출하는 자식(하위) 컴포넌트에게 전달해주는 데이터(문자, 숫자, 객체)
emit : 자식(하위) 컴포넌트에서 부모(상위) 컴포넌트에게 전달해주는 데이터
 
ex) 부모 컴포넌트 (구매리스트 : buyList.vue)에서 호출 된 자식 컴포넌트( 데이트피커 컴포넌트 : DatePicker.vue)

  <DatePicker
    :propRuleType="'ymd'"
    :showType="'ranged'"
    :startDate="startDate"
    :endDate="endDate"
    @selectStartDate="
      (seletedValue) => {
        startDateEx = seletedValue;
      }
    "
    @selectEndDate="
      (seletedValue) => {
        endDateEx = seletedValue;
      }
  >
  </DatePicker>

위 컴포넌트는 props(:으로 시작) 와 emit(@로 시작) 두 부분으로 나뉘어 집니다.

[props]

  • [부모, 상위]구매 목록(buyList.vue) 에서
    [자식, 하위]데이트피커 컴포넌트(DatePicker.vue)호출 할 때 지정하는 데이터입니다.

아래와 같이 구매리스트에서 Datepicker 컴포넌트를 호출하게 되면 콜론 뒤에 작성하는게 props입니다.
props를 통해 컴포넌트에게 다음과 같은 데이터를 전달해주어 출력하게 합니다.

  :propRuleType="'ymd'"
  :showType="'ranged'"
  :startDate="startDate"
  :endDate="endDate"

위와 같이 props로 데이터를 바인딩할 수 있고, 문자열로 작성할 수 있습니다.
데이터 바인딩 시에는 :프롭스예시= " 데이터 " 쌍콤마 사이에 데이터를 넣습니다.
문자열 입력 시에는 :프롭스예시= " '문자열' " 쌍콤마 사이에 콤마를 한 더 감싸서 문자열로 입력하시면 됩니다.

[emit]

  • [자식, 하위]데이트피커 컴포넌트(DatePicker.vue) 에서 변경/선택 된 함수를 통해
  • [부모, 상위]구매 목록(buyList.vue) 에게 전달하는 데이터 입니다.

DatePicker는 날짜 변경이 발생 했을 때, onChangeSelectDate 함수가 실행되어 변경 된 날짜 데이터를 emit
다음과 같은 형식으로 부모 컴포넌트인 구매리스트에게 전달합니다.

// DatePicker.vue
  onChangeSelectDate(getDateType) {
  	switch (getDateType) {
            case a:  this.$emit("selectSingleDate", this.SingleDate);
                     break;
            case b:  this.$emit("selectStartDate", this.StartDate);
                     break;
            case c:  this.$emit("selectEndDate", this.EndDate);
                     break;
            default: break;
     }
  }

우선 emit 함수는 this.$emit("emit명 : 부모(상위)에서 해당 emit 함수를 받아주는 이름" , 전달할 데이터) 로 구성되어 있습니다.
여기서 중요하게 보셔야 할 것은 this.$emit 메서드 괄호 안에 인자 값인 "selectSingleDate"입니다.
자식 컴포넌트에서 부모 컴포넌트로 데이터를 전달(emit)할 때, 부모 컴포넌트에서 선언 된 해당 인자 명으로 전달하기 때문에 이 부분을 꼭 맞춰야 합니다.

// buyList.vue - <template> - <DatePicker> 컴포넌트 내
  @selectStartDate="
    (seletedValue) => {
      startDateEx = seletedValue;
    }
  "
  @selectEndDate="
    (seletedValue) => {
      endDateEx = seletedValue;
    }

구매 목록(부모 컴포넌트) 에서 해당 emit 값을 받을 때,
@인자명 = " ( seletedValue ) => { this.exData = seletedValue } " 이런 형식으로 작성이 되어있습니다.

  • 인자명은, props에서 보내는 인자명과 동일하게 맞춰야 하며
  • 파라미터로 들어있는 seletedValue는 자식 컴포넌트에서 입력 한 두번째 인자 값 ( this.SingleDate / this.StartDate / this.EndDate ) 입니다.
  • 이후 중괄호 { } 내에서 해당 값(seletedValue) 을 부모 컴포넌트의 데이터에 저장하시면 됩니다.

 

 

 


함께 읽으면 좋은 글 

 

vue-router 설정 방법 : 2023.05.02 - [Dev/✅ Vue.js] - vue-router 설치부터 환경설정 및 사용방법

 

vue-router 설치부터 환경설정 및 사용방법

목차 1. router 설치 2. router 설정 3. router 예제 1. router 설치 (yarn , npm) yarn 설치 yarn add vue-router@4 npm 설치 npm install vue-router@4 참고 : https://router.vuejs.org/installation.html 2. router 설정 router를 사용하기 위해

icea.tistory.com

 

axios 설정 방법 :2023.04.18 - [Dev/✅ Vue.js] - [Vue] Axios를 이용한 http 통신 - 설치부터 예제, 비동기 처리까지.

 

[Vue] Axios를 이용한 http 통신 - 설치부터 예제, 비동기 처리까지.

목차 1. Axios 란? 2. Axios 설치 3. Axios 문법 4. Axios 사용 방법 (post) 5. Vue 에서 Axios 설정 6. Axios 예제 (Get, Post) 7. Axios 비동기처리 예제 (Get, Post) https://axios-http.com/kr/docs/intro 시작하기 | Axios Docs 시작하

icea.tistory.com

 

vuex 모듈 설정 및 사용 방법 : 2023.03.16 - [Dev/✅ Vue.js] - Vuex 모듈 및 사용 방법 정리

 

Vuex 모듈 및 사용 방법 정리

Intro현재 Vue.js에서 공식적으로 지원하는 상태관리 라이브러리는 Vuex에서 Pinia로 변경되었지만, 업무에서 Vuex를 사용하고 있어 이를 정리하기 위해 작성한 글입니다. (그래도.. 아직.. Vuex 사용..

icea.tistory.com

 

반응형

댓글