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

[vue] props

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

props는 부모컴퍼넌트에서 자식 컴퍼넌트로 값을 전달할떄 사용함

단순 값 전달뿐 아니라 아래의 옵션 설정도 가능하다.


props 각종 옵션들

 

- required 필수여부

- default 기본 값

- validator 유효성 검사 함수

 

#type

props: {
  title: {
    type: [String,Number]  //여러가지 타입 허용
  }
}

 

#required

props: {
  title: {
    type: [String,Number],  //여러가지 타입 허용
    required: true          //필수로 전달 받아야함
  }
}

 

#default

props: {
  title: {
    type: [String,Number],  //여러가지 타입 허용
    default: 100            //부모 컴퍼넌트에서 보내주는 값이 없을시 기본값으로 대체
  }
}
props: {
  title: {
    type: Object,
    default: () => {}      //배열이나 함수의 기본 값은 항상 함수로부터 반환되어야 함
  }
}

//default: () => { return [1, 2, 3, 4] }
//default: () => { return { abc: 'vasfd' } }

 

#validator 

props: {
  a: {
    type: Array,
    required: true,
    default: () => { return [1, 2, 3, 4] },
    validator: (val) => {
      return val.length > 5
    }
  }
}

props 컴퍼넌트간 동기화 하기

 

 

부모 컴퍼넌트에서 props로 넘겨준 값을

바로 자식컴퍼넌트의 input 태그 등에서 v-model로 사용했을때 

Unexpected mutation of "props" prop 란 에러를 마주쳤을것임

 

vue3에서는 props로 넘겨준 값을 바로 v-model로 사용하는것을 권장하지 않음

그래서 props로 넘겨준 값은 아래와 같이 따로 변수로 관리해야함

 

그런데 이렇게 놔둬버리면 부모컴퍼넌트에서 자식컴퍼넌트를 호출했을 당시의

msg변수는 잘 저장이 되겠지만,

부모컴퍼넌트의 input을 이용하여 msg를 변경하였을 시

자식컴퍼넌트의 props안에 있는 msg는 실시간 업데이트 되지 않는다.

 

만일 실시간으로 부모컴퍼넌트에서의 msg 변경을 자식컴퍼넌트에서도 적용되길 원한다면

computed를 이용하여 props 값을 지니면 됨

 

 

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

[vue] provide / inject  (2) 2022.01.19
[vue] v-slot  (1) 2022.01.19
[vue] vue 키 이벤트  (0) 2022.01.19
[vue] watch / computed / watcheffect  (0) 2022.01.19
[vue] vue HTML 데이터 바인딩 (sanitize-html)  (0) 2022.01.19

댓글