v-bind
디렉티브로 바인딩해서 정의 (ex. :age="20"
)<ChildComponent name="Minha" age="20" />
<ChildComponent :name="`Minha`" :age="20" />
<script>
export default {
props: ['name', 'age']
}
</script>
<script>
export default {
props: {
name: String,
age: {
type: Number, // 여러 타입 지정 가능 => [Number, String]
default() {
// 로직이 필요할 때 작성
return 10
},
required: true
}
}
}
</script>
kebab-case
)calmelCase
)v-on
디렉티브로 특정 이벤트 타입에 해당하는 이벤트 연결 가능<script>
// import ~
export default {
components: {
ChildComponent,
},
data() {
return { };
},
methods: {
printHello() {
console.log('Hello');
},
},
};
</script>
<template>
<ChildComponent @print-hello="printHello" />
</template>
// emits 옵션 - 배열로 할당
export default {
emits: ['printHello'],
};
// emits 옵션 - 객체로 할당
export default {
emits: {
printHello: null;
printHello() {
// 검증 로직
},
};
$emit()
내장 메서드를 이용해 함수 사용<button @onClick="$emit('printHello')">클릭</button>
this.$emit('printHello')
사용하는 메서드 정의$emit()
내장 메서드의 2번째부터 인자로 전달$emit('printHello', value1, value2)
provide: {
message: "Hello",
name: "Minha",
}
provide() {
return {
message: "Hello",
name: this.name,
// 함수 형식일 때만 data 속성, computed 속성에 있는 값 사용 가능
}
}
inject: ['message', 'name'],
inject: {
newKey: {
from: 'message', // 다른 이름으로 받기 가능
default: 40, // 기본값 설정
},
},
🔍 반응형이란?
데이터 변경에 따라 UI를 자동으로 업데이트하는 메커니즘
provide() {
return {
value: computed(() => this.value)
}
}
export const key = Symbol();
export const func = Symbol();
// key랑 func import 하기
provide() {
return {
[key]: computed(() => this.value),
[func]: this.func
}
}
// key랑 func import 하기
inject: {
// Symbol 활용 시, 반드리 객체 형태로
newKey: { from: key },
fn: { from: func },
}
자식 컴포넌트가 부모 컴포넌트로 값을 전달할 방법은 없음
그러나 부모 컴포넌트가 자식 컴포넌트의 값을 참조할 방법은 있음
<ChildComponent ref="ref명" />
$ref 객체
를 통해 자식 컴포넌트의 data, computed, methods 옵션 속성 접근 가능console.log(this.$refs.ref명.data명)
/ this.$refs.ref명.method명()
$parent 객체
를 통해 부모 컴포넌트 접근 가능 (따로 설정 필요 X)console.log(this.$parent.data명)