- 데이터 타입 설정
props: {
data: Number
}
props: {
data: {
type: Number
}
}
- 필수 값 여부 설정
props: {
data: {
type: Number,
required: true
}
}
- 기본 값 설정
props: {
data: {
type: Number,
required: true,
defalut: 1
}
}
props: {
data: {
type: Array,
required: true,
defalut: () => {
return [1, 2, 3]
}
}
}
- 벨리데이터 설정
props: {
data: {
type: Number,
required: true,
defalut: 1,
validator: (value) => {
return value > 0
}
}
}
props 옵션 사용 시 장점?
- props의 추가 속성을 지정해주면 더 정확한 데이터 전달과 타입 추론이 가능해짐 => 추후 데이터 때문에 문제가 생길 확률이 줄어듦
- deep 속성 사용하기
data() {
return {
accountInfo: {
name: "홍길동",
age: 25
}
}
},
watch: {
accountInfo: {
handler() {
console.log("watched accountInfo");
},
deep: true
}
}
watch: {
accountInfo: {
handler() {
console.log("watched accountInfo");
},
deep: true,
immediate: true
}
}
- 쿼테이션안에 특정 값 지정하기
watch: {
"accountInfo.age"() {
console.log("watched accountInfo");
}
}
차이점?
- deep 옵션 사용 시에는 객체 안 모든 하위 값의 변경을 감지하고, 따옴표 표현식은 오브젝트 특정 키 값을 지정해서 특정 데이터 변경을 감지해줄 수 있다.
dialog.js
<script>
export const DialogMixin = {
data() {
return {
dialog: false,
};
},
mounted() {
this.dialog = true;
},
methods: {
closeDialog() {
this.dialog = false;
},
},
};
</script>
Home.vue
<template>
//...생략
<div class="dialog" v-if="dialog">
<button @click="closeDialog">X</button>
</div>
</template>
<script>
import { DialogMixin } from "@/mixin/dialog.js";
export default {
name: "Home",
mixins: [ DialogMixin ],
}
</script>
Mixin의 장점?
- 컴포넌트의 코드가 간결해지고(중복 제거) 유지보수와 재활용성이 높아진다.
Mixin의 단점?
- 다중 믹스인을 상속 시 컴포넌트 관리가 어려워진다.(특정 코드가 어떤 믹스인에서 온 것인지 파악하기 어려움)
- 하나의 컴포넌트 안에 다중 로직 작성 시 가독성이 떨어지고 복잡해짐