<script setup>
defineProps()
</script><script setup>
defineProps(['myMsg'])
</script><script setup>
defineProps({
myMsg:String
})
</script>props 선언 후 템플릿에서 반응현 변수와 같은 방식으로 활용
<div>
<p> {{ myMsg }} </p>
</div>
props를 객체로 반환하므로 필요한 경우 JavaScript에서 접근 가능
<script setup>
const props = defineProps({myMsg:string})
console.log(props) // {myMsg:'message'}
console.log(props.myMsg) // message
</script>
<template>
<div>
<ParentChild my-msg="message" />
</div>
</template>ParentChild 컴포넌트를 부모로 갖는 ParentGrandChild 컴포넌트 생성 및 등록
<!-- ParentGrandChild.vue -->
<template>
<div>
<p>{{ myMsg }}</p>
</div>
</template>
<script setup>
defineProps({
myMsg:String,
})
</script>
<template>
<div>
<p>{{ myMsg }}</p>
<ParentGrandChild :my-msg="myMsg"/>
</div>
</template>
<script setup>
import ParentGrandChild from '@/components/ParentGrandChild.vue'
defineProps({
myMsg:String,
})
</script>
<ParentChild my-mgs="message" />defineProps({
myMsg:String
})
<p>{{myMsg}}</p>vfor와 함꼐 사용하여 반복되는 요소를 props로 전달하기
ParentItem 컴포넌트 생성 및 Parent의 하위 컴포넌트로 등록
<!-- ParentItem.vue -->
<template>
<div>
</div>
</template>
<script setup>
</script>
<!-- Parent.vue -->
<template>
<div>
<ParentItem/>
</div>
</template>
<script setup>
import ParentItem from '@/components/ParentItem.vue'
</script>
데이터 정의 및 v-for 디렉티브의 반복 요소로 활용
각 반복 요소를 props로 내려 보내기
<!-- Parent.vue -->
const items = ref([
{id : 1, name : '사과'},
{id : 2, name : '바나나'},
{id : 3, name : '딸기'}
])
<!-- Parent.vue -->
<ParentItem
v-for="item in items"
:key="item.id"
:my-prop="item"
/>
props 선언 및 출력 결과 확인
<!-- ParentItem.vue -->
<template>
<div>
<p>{{ myProp.id }}</p>
<p>{{ myProp.name }}</p>
</div>
</template>
<script setup>
defineProps({
myProp:Object
})
</script>
<button @click="emit('someEvent')"> 클릭 </button><ParentComp @some-event="someCallback"/>defineEmits()를 사용하여 발신할 이벤트를 서언
props와 마찬가지로 defineEmits()에 작성하는 인자의 데이터 타입에 따라 선언 방식이 나뉨(배열, 객체)
defineEmits()는 $emit 대신 사용할 수 있는 동등한 함수를 반환
<script setup>
defineEmits()
</script>
<script setup>
const emit = defineEmits(['someEvent', 'myFocus'])
const buttonClick = function(){
emit('someEvent')
}
</script>
이벤트 선언 방식으로 추가 버튼 작성 및 결과 확인
<!-- ParentChild.vue -->
<script src>
const emit = defineEmits(['someEvent'])
const buttonClick = function(){
emit('someEvent')
}
</script>
<template>
<button @click="buttonClick">클릭</button>
</template>
ParentChild에서 이벤트를 발신하여 Parent로 추가 인자 전달하기
<!-- ParentChild.vue -->
const emit = defineEmits(['someEvent','emitArgs'])
const emitArgs = function(){
emit('emitArgs',1 ,2 ,3)
}
<!-- ParentChild.vue -->
<button @click = "emitArgs">추가 인자 전달</button>
<!-- Parent.vue -->
<ParentChild
@some-event="someCallback"
@emit-args = "getNumbers"
my-msg ="message"
:dynamic-props="name"
/>
<!-- Parent.vue -->
const getNumbers = function(...args){
console.log(args)
console.log(`ParentCild가 전달한 추가인자 ${args}를 수신했어요 `)
}
선언 및 발신 시
<button @click="$emit('someEvent')">클릭</button>
const emit = defineEmits(['someEvent'])
emit('someEvent')
부모 컴포넌트에서 수신 시
<ParentChild @some-event="..."/>
이벤트 수신 후 이름 변경을 요청하는 이벤트 발신
// ParentChild.vue
const emit = defineEmits(['someEvent','emitArgs', 'updateName'])
const updateName = function(){
emit('updateName')
}
// ParentChild.vue
<ParentGrandChild :my-msg="myMsg" @update-name="updateName"/>
이벤트 수신 후 이름 변수 변경 메서드 호출
해당 변수를 props으로 받는 모든 곳에서 자동 업데이트
<ParentChild @update-name="updateName"/>
const updateName = function(){
name.value = 'Bella'
}