Vue.jsλ λ§μ νλ‘ νΈμλ κ°λ°μλ€μ΄ μ¬λνλ νλ μμν¬μ
λλ€.
2020λ
μ Vue 3κ° μ μ μΆμλλ©΄μ Vue 2μλ λ§μ λ³νκ° μκ²Όλλ°μ,
μ΄λ² κΈμμλ Vue 2μ Vue 3μ ν΅μ¬μ μΈ μ°¨μ΄μ λ€μ μ 리ν΄λ³΄λ €κ³ ν©λλ€.
Vue 2λ Options APIλ₯Ό κΈ°λ°μΌλ‘ ꡬμ±λ©λλ€.
data, methods, computed, watch κ°μ μ΅μ
λ€μ λΆλ¦¬ν΄μ μ μνμ£ .
Vue 3μμλ κΈ°μ‘΄ λ°©μλ κ·Έλλ‘ μ¬μ©ν μ μμ§λ§,
μλ‘μ΄ Composition APIκ° μΆκ°λμμ΅λλ€.
setup() ν¨μ μμμ κ΄λ ¨ λ‘μ§μ νλλ‘ λ¬Άμ΄ κ΄λ¦¬ν μ μμ΄ μ½λ μ¬μ¬μ©μ±κ³Ό μμ§λ ₯μ΄ μ’μμ‘μ΅λλ€.
// Vue 2 λ°©μ
export default {
data() {
return { count: 0 };
},
methods: {
increment() {
this.count++;
}
}
}
// Vue 3 Composition API λ°©μ
import { ref } from 'vue';
export default {
setup() {
const count = ref(0);
const increment = () => count.value++;
return { count, increment };
}
}
Vue 2λ Object.defineProperty()λ₯Ό μ¬μ©ν΄ λ°μ΄ν°μ λ°μμ±μ ꡬννμ΅λλ€.
νμ§λ§ κΉμ κ°μ²΄λ λ°°μ΄μ λν κ°μ§κ° νκ³κ° μμμ£ .
Vue 3μμλ Proxy κΈ°λ°μ λ°μμ± μμ€ν
μ λμ
ν΄
μ±λ₯κ³Ό μ μ°μ±μ΄ ν¬κ² ν₯μλμμ΅λλ€.
μ΄ λλΆμ 볡μ‘ν ꡬ쑰μ μν κ΄λ¦¬λ ν¨μ¬ μμ μ μΌλ‘ ν μ μκ² λμμ£ .
Vue 3λ Virtual DOMμ μμ ν μ¬μμ±νλ©΄μ λ€μκ³Ό κ°μ μ±λ₯ ν₯μμ μ΄λ€μ΅λλ€:
Vue 3μμλ κΈ°μ‘΄μ μλ μ μ©ν κΈ°λ₯λ€μ΄ λμ λμμ΅λλ€:
Vue 3λ μ²μλΆν° TypeScriptλ‘ μμ±λμμ΅λλ€.
λλΆμ μ»΄ν¬λνΈ μμ± μ μλ μμ±κ³Ό νμ
μΆλ‘ μ΄ ν¨μ¬ κ°λ ₯ν΄μ‘μ΅λλ€.
κΈ°μ‘΄ Vue 2μμλ TypeScriptλ₯Ό μΈ μλ μμμ§λ§, Vue 3μ λΉν΄ μ νμ μ΄μμ΅λλ€.
Composition APIμμλ κΈ°μ‘΄ λΌμ΄νμ¬μ΄ν΄ ν λ€μ΄ λ€μκ³Ό κ°μ΄ λ³κ²½λ©λλ€:
| Vue 2 | Vue 3 (Composition API) |
|---|---|
created | onBeforeMount() |
mounted | onMounted() |
updated | onUpdated() |
destroyed | onUnmounted() |
Composition API ν
μ setup() ν¨μ μμμ νΈμΆλμ΄μΌ ν©λλ€.
Vue 3λ κΈ°μ‘΄ Vue 2μ μμ ν νΈνλμ§λ μμ΅λλ€.
λ€μκ³Ό κ°μ μ λ€μ κ³ λ €ν΄μΌ ν©λλ€:
Vue 3λ λ¨μν "μ
κ·Έλ μ΄λ" μμ€μ λμ΄μ μλ‘μ΄ ν¨λ¬λ€μμ μμμ
λλ€.
Composition APIμ λμ
μ Vueλ₯Ό λ μ μ°νκ³ νμ₯ κ°λ₯νκ² λ§λ€μμΌλ©°,
μ±λ₯ ν₯μκ³Ό μλ‘μ΄ κΈ°λ₯λ€λ λ§€μ° μΈμμ μ
λλ€.
Vue 2μ μ΅μνμ λΆμ΄λΌλ©΄,
Vue 3μ μλ‘μ΄ λ¬Έλ²κ³Ό κΈ°λ₯λ€μ νλμ© μ²μ²ν μ΅ν보λ κ±Έ μΆμ²λ립λλ€.
곡μ λ¬Έμλ μμ λ₯Ό μ°Έκ³ νλ©΄μ μ μ§μ μΌλ‘ μ νν΄λ³΄μΈμ!