vue 3 λ°μν - reactive and ref
π vue 3 λ°μν - reactive and ref
composition APIλ₯Ό κΈ°μ€μΌλ‘ ν©λλ€
λ°μν
vueμμλ λ°μ΄ν°μ μ€μκ° μ λ°μ΄νΈκ° κ°λ₯ν κ²μ λ°μνμ΄λΌκ³ νλ€
β reactive
reactive() ν¨μλ₯Ό μ¬μ©νμ¬ κ°μ²΄ λλ λ°°μ΄μ λ°μνμΌλ‘ λ§λ€ μ μλ€
λ°ν κ°μ μλ³Έ κ°μ²΄μ κ°μ§ μκ³ μλ³Έ κ°μ²΄λ₯Ό μ¬μ μν κ°μ²΄μ΄λ€
const raw = {}
const proxy = reactive(raw)
// λ°μνμΌλ‘ μ¬μ μ λ κ²μ μλ³Έκ³Ό κ°μ§ μλ€
console.log(proxy === raw) // false
κ°μ²΄, λ°°μ΄ λλ Mapμ΄λ Setκ³Ό κ°μ 컬λ μ μ νμλ§ μ¬μ© κ°λ₯νλ€
reactive μμ
μ«μκ° μ¦κ°νλ©° νλ©΄μ μ€μκ° λ°μΈλ©μ νλ μμ μ΄λ€
reactive μ¬μ© μ¬λΆμ λ°λ₯Έ μ°¨μ΄μ μ λΉκ΅ν΄λ³΄μ
<div>{{ state.count }}</div>
<button @click="state.count++">state.count++</button>
<div>{{ countNormal }}</div>
<button @click="countNormal++">countNormal++</button>
import { reactive } from "vue"
const countNormal = 0
const state = reactive({ count: 0 })
reactiveλ₯Ό μ¬μ©ν state.countμ μ€μκ° λ°μΈλ©λ§ κ°λ₯νλ€
μ΄λ κ² μ€μκ° λ°μΈλ©μ΄ κ°λ₯ν κ²μ vueμμλ λ°μνμ΄λΌκ³ νλ€
reactive()λ μμ λ₯Ό 보면 μ μ μλ―μ΄ state.countμ²λΌ νΉμ κ°μ μ κ·Όν λμλ λ°μ΄ν°μ μμ±μΌλ‘ μ κ·Όν΄μΌνλ€
β ref
ref()λ reactiveμ μ ν μ¬νμ ν΄κ²°νκΈ° μν΄, νμ μ ν μμ΄ λ°μ΄ν°λ₯Ό λ°μνμΌλ‘ μ¬μ μν μ μλ ν¨μμ΄λ©°
.value μμ±μ ν¬ν¨νλ ref κ°μ²΄λ‘ λ°ννλ€
const countRef = ref(0)
console.log(countRef) // { value: 0 }
console.log(countRef.value) // 0
countRef.value++
console.log(countRef.value) // 1
ref μμ
reactive() μμ μ κ°μ΄ 'μ«μκ° μ¦κ°νλ©° νλ©΄μ μ€μκ° λ°μΈλ©μ νλ μμ 'λ₯Ό ν΅ν΄μ
reactiveμ refμ λ¬Έλ² μ°¨μ΄μ μ λΉκ΅ν΄λ³΄μ
<div>{{ stateReactive.count }}</div>
<button @click="stateReactive.count++">stateReactive.count++</button>
<div>{{ countRef }}</div>
<button @click="countRef++">countRef++</button>
import { reactive, ref } from "vue"
const stateReactive = reactive({ count: 0 })
console.log(stateReactive.count)
const countRef = ref(0)
console.log(countRef.value)
templateμ λ°μΈλ©μ ν λ refλ μμ±μ΄ μλ ν΄λΉ λ°μ΄ν°μ λ°λ‘ μ κ·Όν μ μκΈ° λλ¬Έμ reactiveμ λΉν΄ κ°λ¨νλ€
νμ§λ§ refλ script μμμμ ν΄λΉ λ°μ΄ν°μ μ κ·ΌνκΈ° μν΄μλ .valueλ₯Ό ν΅ν΄μ μ κ·Όν΄μΌ νλ€
β reactive vs ref
- reactive()μ ref() λͺ¨λ μλ‘μ΄ κ°μ²΄λ₯Ό λ°ννλ€
- reactiveλ κ°μ²΄μ λ°°μ΄ λλ 컬λ μ μ νλ§ λ°μνμΌλ‘ μ¬μ μν μ μλ€
- refλ νμ μ ν μμ΄ μ¬μ© κ°λ₯νλ€
reactiveμ refλ₯Ό νΌμ©ν μ§ νλλ§μ μ¬μ©ν μ§μ λν 컨벀μ μ μ μν ν ν΄λΉ 컨벀μ μ λ°λΌκ°λ©΄ λλ€
β λν, μΈλν
μ΄λ€ κ°μ΄ refμ ν λΉλμ΄ μλ€κ³ κ°μ νλ€
μλ μμ λ₯Ό 보면 script μμμμλ λνλμ΄ μκ³ template μμμμλ μΈλνλμ΄ μλ€
<div>{{ countRef }}</div>
<button @click="countRef++">countRef++</button>
import { ref } from "vue"
const countRef = ref(0)
console.log(countRef.value)
https://v3-docs.vuejs-korea.org/guide/essentials/reactivity-fundamentals.html
λ°μν κΈ°μ΄ | Vue.js
v3-docs.vuejs-korea.org