π₯ [Vue] Vue μ λν΄ μμ보μ
ν΄λΉ ν¬μ€νΈλ Vue.js μ λν΄ μ€μ μ μΌλ‘ λ€λ£¨λ νμ΄μ§ μ λλ€.
μ?
Vue 2
μ μ§μμ 2023.12.31 λΆλ‘ λμ΄ λκΈ°λ νκ³ νμ¬ λ€λλ νμ¬μμ Vue
λ₯Ό κ°μ₯ λ§μ΄ μ¬μ©νκ³ μμ΄ λ°°μλ³΄λ € νλ€.
νν λ λ΄κ° μμ¨λ³Έ κ² μ€ νλκ° Vue
μ΄κΈ°μ..
Vue λ?
Vue === View
Vue
λ View
μ λ°μμ΄ μ μ¬νλ€. Vue.js λ Model-View μμ View
μ ν΄λΉνλ
μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμΆνκΈ° μν μλ°μ€ν¬λ¦½νΈ νλ μ μν¬ λΌκ³ νλ€.
HTML, CSS, JavaScript μμ κ΅¬μΆ λλλ°
νΉμ΄νκ²λ .vue
λΌλ κ³ μ νμ₯μ λͺ
μ μ¬μ©νλ€. μ΄κ±Έ μ£Όλ‘ SFC λΌκ³ λΆλ₯Έλ€.
SFC (Single File Component)
μνκ° λ³κ²½ λ λ HTML μ μλμΌλ‘ μ λ°μ΄νΈ νλ©°
μ΄λ λ³κ²½ λ μ λ°μ΄νΈλ₯Ό νΈλ¦¬κ±° ν μ μλ μνλ₯Ό λ°μνμ΄λΌκ³ ν¨
μ΄μ ν΄λΉνλ Vue μ νΉμ§ μ€ SFC
λ₯Ό λ¨Όμ κ°λ΅ν μμ보μ
SFC (μ±κΈ νμΌ μ»΄ν¬λνΈ)
λΉλ λꡬλ₯Ό μ¬μ©νλ λλΆλΆμ Vue νλ‘μ νΈμμλ HTML κ³Ό μ μ¬ν SFC νμΌ νμμ μ¬μ©νλ©°
μ»΄ν¬λνΈμ λ Όλ¦¬ (JS)
ν νλ¦Ώ (HTML)
μ€νμΌ (CSS)
μ ν κ³³μ λ¬Άμ΄ μΊ‘μν νλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- vue μ΄μ§λ§ rouge κ° vue λ₯Ό μΈμνμ§ λͺ»νλ―λ‘ -->
<!-- highlight λ₯Ό html μΌλ‘ λ체 -->
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>
<template>
<button @click="count++">Count is: 9</button>
</template>
<style scoped>
.button {
font-weight: bold;
}
</style>
νλ‘κ·Έλ μλΈ νλ μμν¬
Vue λ νλ‘ νΈμ€λ κ°λ°μ μ£Όλ‘ μ¬μ©νλ βνλ μμν¬β μ€ νλλ€.
νμ§λ§ μΉμ λ§€μ° λ€μνκ³ κ΅¬μΆνλ €λ κ²μ ννμ κ·λͺ¨κ° λ€ λ€λ₯Ό μ μλ€.
κ·Έλμ Vue λ μ²μ μ€κ³ λ λλΆν° μ‘°κΈ λ μ μ°ν λ°©λ²μΌλ‘ μ€κ³λμλ€κ³ νλ€.
- λΉλ κ³Όμ μμ΄ μ μ HTML μ μ μ©
- λͺ¨λ νμ΄μ§μ μΉ μ»΄ν¬λνΈλ‘ μΆκ°
- SPA
- SSR
- SSG (μ μ μ¬μ΄νΈ μμ±)
λ± μ¬λ¬ λ°©λ²μΌλ‘ ꡬνμ΄ κ°λ₯νλ©° μ΄λ° νΉμ±μ νμ©ν΄ Vue
λ μ΄λ€ νκ²½μμλ μ΅μ μ
λ°©λ²μ μ ννλ©΄μ κ°μ μμ°μ±μ μ μ§ ν μ μλ€κ³ νλ€.
API μ€νμΌ
Vue λ Optional API μ Comoposition API μΌλ‘ API μ€νμΌμ λ κ°μ§λ‘ μμ± ν μ μλ€κ³ νλ€.
κ°κ°μ μ€νμΌμλ νΉμ§μ΄ μλλ° νλ² μμ보μ
Optional API
data
,methods
,mounted
κ°μ κ°μ²΄λ₯Ό μ¬μ©νλ©° μ»΄ν¬λνΈμ λ‘μ§μ μ μν¨μ΅μ μΌλ‘ μ μλ μμ±μ μ»΄ν¬λνΈ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ ν¨μ λ΄λΆμ
this
μ λ ΈμΆμ΄ λ¨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script>
export default {
// data()μμ λ°νλ μμ±λ€μ λ°μμ μΈ μνκ° λμ΄
// `this`μ λ
ΈμΆλ©λλ€.
data() {
return {
count: 0
}
},
// methodsλ μμ± κ°μ λ³κ²½νκ³ μ
λ°μ΄νΈ ν μ μλ ν¨μ.
// ν
νλ¦Ώ λ΄μμ μ΄λ²€νΈ ν¨λ€λ¬λ‘ λ°μΈλ© λ μ μμ.
methods: {
increment() {
this.count++
}
},
// μλͺ
μ£ΌκΈ° ν
(Lifecycle hooks)μ μ»΄ν¬λνΈ μλͺ
μ£ΌκΈ°μ
// μ¬λ¬ λ¨κ³μμ νΈμΆλ©λλ€.
// μ΄ ν¨μλ μ»΄ν¬λνΈκ° λ§μ΄νΈ λ ν νΈμΆλ©λλ€.
mounted() {
console.log(`μ«μ μΈκΈ°μ μ΄κΈ°κ°μ ${ this.count } μ
λλ€.`)
}
}
</script>
<template>
<button @click="increment">μ«μ μΈκΈ°: 9</button>
</template>
Composition API
import ν΄μ κ°μ Έμ¨ api ν¨μλ€μ μ¬μ©νλ©° μ»΄ν¬λνΈμ λ‘μ§μ μ μ
SFC μμ Composition API λ μ£Όλ‘
<script setup>
κ³Ό ν¨κ» μ¬μ©ν¨setup μμ±μ ν΅ν΄
Vue
κ° μ’ λ μ μ λ¬Έλ§₯μ μ½λλ‘ composition API λ₯Ό μ¬μ©νκ³μλν λλ‘ μ»΄νμΌ λμ ν μ μλλ‘ νλ μ½λ ννΈ μ€ νλ
<script setup>
μimport
λμ΄ κ°μ Έμ¨ κ°μ²΄λ€κ³Ό μ μΈ λ μ΅μμ λ³μ λ° ν¨μλν νλ¦Ώμμ μ§μ μ¬μ©ν μ μμ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script setup>
import { ref, onMounted } from 'vue'
// λ°μμ μΈ μνμ μμ±
const count = ref(0)
// μμ± κ°μ λ³κ²½νκ³ μ
λ°μ΄νΈ ν μ μλ ν¨μ.
function increment() {
count.value++
}
// μλͺ
μ£ΌκΈ° ν
onMounted(() => {
console.log(`μ«μ μΈκΈ°μ μ΄κΈ°κ°μ ${ count.value } μ
λλ€.`)
})
</script>
<template>
<button @click="increment">μ«μ μΈκΈ°: 9</button>
</template>
κ·ΈλΌ λ μ ννλΌλκ±°μΌ?
λ API λͺ¨λ μΌλ°μ μΈ μ¬μ©νκ²½μμ μ μμ μΌλ‘ μλ²½νκ² λ€λ£° μ μλ€.
νμ§λ§ λ κ°μ§κ° μμ΄ λ§μ΄λ€ κ³ λ―Όνκ³ λ¬΄μμ μ νν΄μΌνλμ§ μκ°νκ² λλ€.
κ·ΈλΌ λ νλΌλκ±°μΌ?
νμ§λ§ μ΅μ API λ μ»΄ν¬μ§μ API μμ μ¬λΌκ°λ€.
Optional API
μΌλ°μ μΌλ‘ OOP μΈμ΄μ λ°°κ²½μ κ°μ§ μ¬μ©μλ₯Ό μν Class κΈ°λ° λͺ¨λΈκ³Ό λ μ λ§λ
μ»΄ν¬λνΈ μΈμ€ν΄μ€ (this κ°λ ) μ μ€μ¬μΌλ‘ νλ©° λ°μν μΈλΆ μ¬νμ μΆμν νκ³
μ΅μ κ·Έλ£Ήμ ν΅ν΄ μ½λ ꡬ쑰λ₯Ό μ€ννμ¬ μ΄λ³΄μμκ² μΉμ
Composition API
ν¨μ λ²μμμ μ§μ λ°μν λ³μλ₯Ό μ μΈνκ³ λ³΅μ‘μ±μ μ²λ¦¬νκΈ° μν΄ μ¬λ¬ν¨μμ μνλ₯Ό
ν¨κ² ꡬμ±νλλ° μ€μ μ λ‘λλ€. λ³΄λ€ λ μμ λ‘μ΄ νμμ΄λ©° Vue μμ λ°μνμ΄ ν¨κ³Όμ μΌλ‘
μ¬μ©νλ λ°©μμ λν΄ μ΄ν΄λ₯Ό ν΄μΌ ν νμκ° μμ. μ’ λ μ μ°νκ³ λ‘μ§μ ꡬμ±νκ³
μ¬μ¬μ©νκΈ° μν λ³΄λ€ κ°λ ₯ν ν¨ν΄μ κ°λ₯νκ² ν¨
κ·Έλ₯ μκΈ°νν
λ§λκ±° μ¬μ©νμ
λ§μΉλ©°
Vue μ λν΄ κ°λ΅νκ² ν° νΉμ§μ κΈ°μ€μΌλ‘ μμ보μλ€.
λ€μ ν¬μ€νΈμμλ Vue μ μ¬μ© λ°©λ²κ³Ό Vue μ λμ λ°©μμ κΈ°μ€μΌλ‘ μμ보μ.
λ λ€μ μλ‘μ΄ κ±Έ λ°°μ°λ € νλ λ¨Έλ¦¬κ° μν λ€β¦
νμ§λ§ 곡λΆλ₯Ό ν΄μΌλ§ νλ μ§μ
μ΄κΈ°μ λ²ν
¨μΌμ§