Vue 3.4 ์ด์์์ ๋์
๋ defineModel()์ ์ฌ์ฉํ๋๋ก ๋ฆฌํฉํฐ๋งํ๋ค๊ฐ ์กฐ๊ฑด๋ฌธ ๋ถ๊ธฐ์์ ์์ ๋ชปํ ์ค๋์์ด ์ผ์ด๋ฌ๋ค. ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ v-model์ ๋ฐ์ธ๋ฉํ์ง ์์์ ๋ ๋ ๋ฐฉ์์ด ๋ด๋ถ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ด ๋ฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ธฐ์กด props์ emit์ ๋จ๋ฐฉํฅ ๋์
๊ธฐ์กด defineProps์ defineEmits ์กฐํฉ์์๋ ๋ถ๋ชจ๊ฐ v-model์ ๋๊ธฐ์ง ์์ผ๋ฉด ์์์ props.modelValue๋ undefined๊ฐ ๋๋ค. ์์ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ธ๋ถ ๋ฐ์ธ๋ฉ ์ ๋ฌด๋ฅผ ํ์ธํ๊ฑฐ๋ ์ ํ๋ ํญ๋ชฉ์ ํด๋ฐฑ์ ๊ณ์ฐํ ๋ props.modelValue๊ฐ undefined์ธ์ง ๊ฒ์ฌํ๋ ์ฝ๋๋ฅผ ํ์ฉํ์๋ค.
// ๊ธฐ์กด props + emits ๊ธฐ๋ฐ ๋ถ๊ธฐ ๋ก์ง
const props = defineProps<{
modelValue?: string
modelObject?: SelectOption
}>()
const emits = defineEmits<{
(e: 'update:modelValue', value: string): void
(e: 'update:modelObject', option: SelectOption): void
}>()
const currentValue = computed(() => {
if (exists(props.modelValue)) {
return props.modelValue
} else if (props.modelObject) {
return props.modelObject.value
} else {
return null
}
})
function selectItem(item: SelectOption) {
emits('update:modelValue', item.value)
emits('update:modelObject', item)
}
์ด ๋ฐฉ์์์๋ update:modelValue ๋ฅผ ๋ฐ์์์ผ๋ props.modelValue์ ๊ฐ ์์ฒด๊ฐ undefined์์ ๋ฐ๋์ง ์๋๋ค. ์ฐธ์กฐํ ๋ณ์๊ฐ ์ฐ๊ฒฐ์ด ์๋์๊ธฐ ๋๋ฌธ.. ๋ถ๋ชจ๊ฐ ๋ณ๊ฒฝ๋ ๊ฐ์ ๋ค์ props๋ก ๋ด๋ ค์ค์ผ ์์ ๋ด๋ถ ๊ฐ์ด ๊ฐฑ์ ๋จ.
defineModel ์ ํ ํ

๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํด defineModel()์ ์ ์ฉํ๊ณ modelValue.value = item.value์ฒ๋ผ ์ง์ ๋ฐ์ํ ์ํ๋ฅผ ์์ ํ๋๋ก ์ฝ๋๋ฅผ ๋ฐ๊พธ๋ฉด์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค.
// defineModel() ๊ธฐ๋ฐ์ผ๋ก ๋ฆฌํฉํฐ๋งํ ์ฝ๋
const modelValue = defineModel<string>()
const modelObject = defineModel<SelectOption>('modelObject')
const currentValue = computed(() => {
if (exists(modelValue.value)) {
return modelValue.value
} else if (modelObject.value) {
return modelObject.value.value
} else {
return null
}
})
function selectItem(item: SelectOption) {
// defineModel์ด ๋ฐํํ ref์ ์ง์ ํ ๋น
modelValue.value = item.value
modelObject.value = item
}
defineModel ์ ๋ถ๋ชจ์ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ๋๋ ref ๊ฐ์ฒด๋ฅผ ์์ ๋ด๋ถ์์ ์๋์ผ๋ก ์์ฑํ๋ค. ๋ถ๋ชจ๊ฐ v-model์ ์ฌ์ฉํ์ง ์์๋๋ผ๋, ์์ ์ปดํฌ๋ํธ ์์์๋ ๋จ์ํ local ref ๋ก ๋์ํ๋ค. modelValue.value = item.value ๋ก ๊ฐ์ ํ ๋นํ๋ฉด ์์ ๋ด๋ถ local ref ์ ๊ฐ์ด ์ธํ
๋๋ ๊ฒ.
๊ทธ ๊ฒฐ๊ณผ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์๋ selectItem ํธ์ถ ์ดํ exists(modelValue.value) ์กฐ๊ฑด๋ฌธ์ด true๋ก ํ๊ฐ๋์ด modelObject.value ๋ถ๊ธฐ๋ฅผ ํ์ง ๋ชปํ๊ณ ์ค๋์์ด ๋๋ค.
๋ถ๋ชจ๊ฐ ์ค์ ๋ก ํด๋น prop์ ์ ๋ฌํ๋์ง ์๊ฒฉํ๊ฒ ํ๋ณํด์ผ ํ๋ค๋ฉด
useAttrs()๋๋defineProps๋ฅผ ํจ๊ป ํ์ธํด ๋ถ๋ชจ ์ ๋ฌ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ค.
๋๊ธ 0๊ฐ