- ํ๊ธ ์
๋ ฅ
<template>
<div class="todo-creator">
<input
:value="title"
type="text"
placeholder="ํ ์ผ์ ์ถ๊ฐํ์ธ์!"
@input="title = ($event.target as HTMLInputElement).value"
@keydown.enter="createTodo" />
<button @click="createTodo">
์ถ๊ฐ
</button>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
import { mapStores } from 'pinia'
import { useTodoStore } from '~/store/todo'
export default defineComponent({
data() {
return {
title: ''
}
},
computed: {
...mapStores(useTodoStore)
},
methods: {
createTodo(event: KeyboardEvent | MouseEvent) { //๊ทธ๋ฅ Event๋ก ํ๊ฒ ํ ์ ์์! ํ์ง๋ง ์๊ฒฉํ๊ฒ ํ๋๊ฒ์ ์ ํธ~
if ((event as KeyboardEvent).isComposing) return //isComposing์ด true๋ฉด ํ๊ธ ์
๋ ฅ์ด ๋๊ณ ์๋ ์ค์ด๋ผ๋ ๋ป!! //isComposing์ keyboardEvent์์๋ง ์์!! ๊ทธ๋์ ์ํด์ฃผ๋ฉด ์๋ฌ~
if (!this.title.trim()) return //๋น๋ฌธ์ ์ธ์ง~
this.todoStore.createTodo(this.title)
this.title = '' // ์๋ฒ์ ์
๋ ฅ๋ ์ดํ์ ์ด๊ธฐํ~!!
}
}
})
</script>
[์ค๊ฐ]
- ์ปดํฌ์ง์ ์์๋ ๋ฐ์ํ์ด ์๋ ์ถ๋ ฅ๋ง ํ๋ ๋ฐ์ดํฐ๋ ์ฌ์ฉ ๊ฐ๋ฅ
- ref :
1.๋ฐ์ํ ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ(์์ํ ์ฐธ์กฐํ ๊ฐ๋ฅ)
3. ref ๊ฐ์ฒด์ ๊ฐ์ ์ฌ์ฉํ ๋ .value ๋ฅผ ๋ถ์ธ๋ค.
2. this.$refs ์์์ฐธ์กฐ
import { ref } from 'vue'
const movie = ref({
title: '',
poster: ''
})
movie.value.title = (movieStore.movie.Title as string)
- reactive:
1.๊ฐ์ฒด์ ๋ฐฐ์ด๋ง ๋ฐ์์ฑ ๋ถ์ฌ ๊ฐ๋ฅ -> ๋ฐ์ํ ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ
2. ๊ฐ์ฒด์ value ๋ฅผ ์ ๋ถ์ธ๋ค.
const movie = reactive({
title: '',
poster: ''
})
- defineComponent ๋ optionsAPI ์์ ts ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ชจ๋
toRefs /toRef
- ๊ฐ์ฒด๊ตฌ์กฐ ๋ถํดํ ๋น์ ํ ๋ ๋ฐ์์ฑ์ด ์ฆ๋ฐ ํด๋ฒ๋ฆฌ๋ ๊ฒ์ ๋ฐฉ์ง
const { name } = $props
const { name } = toRefs($props)
// ์์ ๊ฐ์ ์ฝ๋
const name = toRef($props,'name')
๋ฐ์ํ
'๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[220704] (0) | 2022.07.04 |
---|---|
[220701] Firebase (0) | 2022.07.01 |
[220629] ์ฝ๋ฉํ ์คํธ ๋๋น 2ํ (0) | 2022.06.30 |
[220628] (0) | 2022.06.29 |
[220627] (0) | 2022.06.27 |