Vue๋ ์ง์ง ์ฌ๋งํ๋ฉด ๋ค ์ ์ํ ๊ฒ ๊ฐ์๋ฐ ์ด vue-query์ชฝ์ด๋ ๊ด๋ จ๋๊ฒ๋ค์ ์์ง๋ ๋๋ฌด ์ด๋ ค์...
์ ๋ฆฌํ๊ธฐ ์ ์ MaybeRefOrGetter<T>์ Proxy๊ฐ ๋ญ์ง๋ฅผ ์์์ผ ํ๋ค.
+ MaybeRefOrGetter<T>
ref๋ ๊ฐ์ด๋ ํจ์๋ ์์์ ๊บผ๋ด์ธ ์ ์๋๋ก ํด์ฃผ๋ ์ ํธ ํ์
type MaybeRefOrGetter<T> = T | Ref<T> | (() => T)
์ด๋ฐ ๋๋์ธ๋ฐ, 1๏ธโฃ ๊ทธ๋ฅ ๊ฐ(T)์ผ์๋ ์๊ณ , 2๏ธโฃ Ref(T)์ผ์๋ ์๊ณ , 3๏ธโฃ getterํจ์(T)์ผ์๋ ์๋๋ฐ, ๊ทธ ๊ฐ์ด ๋ฌด์์ด๋ ์ด ์ธ๊ฐ์ง๋ฅผ ์ ๋ถ ๋ฐ์ ์ ์๋ค.
+ Proxy
๋์ ์๋ฏธ๋ก ํด๋ผ์ด์ธํธ - ์๋ฒ ์ฌ์ด์์ ์์ฒญ๊ณผ ์๋ต์ ๋์ ์ฒ๋ฆฌํ๊ณ ์ ๋ฌํ๋ "๋๋ฆฌ์ธ" ์ญํ
โก๏ธ ์ผ๋ฐ์ ์ธ ๋คํธ์ํฌ(์ธํฐ๋ท) : ํด๋ผ์ด์ธํธ์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญ์ ๋์ ๋ฐ์์ ์๋ฒ์ ์ ๋ฌ, ์น์ฌ์ดํธ์ ์๋ต์ ๋ค์ ์ ๋ฌํ๋ ์ค๊ฐ ์๋ฒ
โก๏ธ ์๋ฐ์คํฌ๋ฆฝํธ(Vue3 ๋ฑ) : ์ฝ๋(ํด๋ผ์ด์ธํธ)๊ฐ ๊ฐ์ฒด(์๋ฒ ์ญํ )์ ๊ฐ์ ์ฝ๊ฑฐ๋(get) ์ฐ๋(set)ํ๋ ๋์์ ๊ฐ๋ก์ฑ์(intercept) ๋ฐ์ํ ์์คํ ์ด ํ์ํ ์ถ๊ฐ ์์ (๊ฐ์ง/๊ธฐ๋ก/์๋ฆผ, Handler)์ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๋ฆฌ ๊ฐ์ฒด)
์งํผํฐ ์ค๋ช ๐ฝ
1๏ธโฃ ๋คํธ์ํฌ Proxy
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ์์ฒญ/์๋ต์ ๋์ ์ฒ๋ฆฌํด์ฃผ๋ ์ค๊ฐ์.
- ์: ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ์ง์ ์์ฒญํ๋ ๋์ Proxy ์๋ฒ๋ฅผ ๊ฑฐ์ณ์ ์์ฒญ → ์๋ฒ ์๋ต → ๋ธ๋ผ์ฐ์ ์ ๋ฌ.
2๏ธโฃ ์๋ฐ์คํฌ๋ฆฝํธ Proxy
- Proxy ๊ฐ์ฒด๋ JS์์ ์ ๊ณตํ๋ ๋ด์ฅ ๊ฐ์ฒด.
- ์ญํ = "๋๋ฆฌ์ธ"
- ๊ฐ์ฒด์ ๊ฐ์ ์ฝ๊ฑฐ๋(get) ์ฐ๋(set) ๋์์ ๊ฐ๋ก์ฑ(intercept)
- ์ถ๊ฐ ์์ ์ํ ๊ฐ๋ฅ: ๊ฐ์ง, ๊ธฐ๋ก, ์๋ฆผ, ๋ฐ์ํ ์ ๋ฐ์ดํธ ๋ฑ
- Vue 3์ reactive()๋ ref()๊ฐ ๋ด๋ถ์ ์ผ๋ก Proxy๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ํ ์์คํ ๊ตฌํ
Vue3์ ๋ฐ์ํ ์์คํ ์ ํต์ฌ์ด๋ค
Vue3์์ reactive()๋ ๋ด๋ถ์ ์ผ๋ก Proxy๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ทธ๋์ reactive(obj)๋ฅผ ์ฌ์ฉํ๋ฉด Vue๋ obj์ ๊ฐ์ ์ฝ์ ๋/๋ฐ๊ฟ ๋ ๊ฐ์งํด์ ๋ฐ์ํ ์์คํ (reactivity)์ ๊ธฐ๋กํ๋ค.
์ด๊ฒ ์ดํด๊ฐ ๋ฌ๋ค๋ ์ ์ ํ์
1. toValue()
๊ทธ ์ด๋ ํ ๊ฐ์ด ๋ค์ด์ค๋ ์ค์ ๊ฐ๋ง ๋ฝ์์ T(์ค์ ๊ฐ)๋ก ๋ฐํํด์ฃผ๋ ํจ์
ref๋ก ๋ค์ด์ค๋ , ์ผ๋ฐ ๊ฐ์ด ๋ค์ด์ค๋ , ํจ์๋ก ๋ค์ด์ค๋ ์ ๋ถ ์๊ด ์์ด ์ค์ ๊ฐ๋ง ์ถ๋ ฅํ๋ค.
const a = ref(10)
const b = () => 20
const c = 30
console.log(toValue(a)) // 10 (ref๋ผ์ .value ๊บผ๋ด์ค)
console.log(toValue(b)) // 20 (ํจ์๋ผ์ ์คํ ๊ฒฐ๊ณผ ๊บผ๋)
console.log(toValue(c)) // 30 (๊ทธ๋ฅ ๊ฐ์ ๊ทธ๋๋ก ๋ฐํ)
์ด๋ฐ์์ผ๋ก ํญ์ ์ค์ ๊ฐ(10, 20, 30)๋ง ์ป๋๋ค.
- ๋ฌด์กฐ๊ฑด MaybeRefOrGetter<T>์ผ ํ์๋ ์๊ณ , reactive๋ ์์๊ฐ(primitive type)์ด์ด๋ ๊ทธ ์์ ๊ฐ์ ํญ์ "๊ธฐ๋ณธ๊ฐ"์ผ๋ก ํด์ค๋ค.
- ํญ์ ํด๋น ๊ฐ์ ๋ฐ์ํ ๊ฐ์ ๊น์ ํ์ธํ๊ธฐ ๋๋ฌธ์(= ํธ์ถ ์์ ์ ์ค์ ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์), ๋ฐ์ํ์์ ๊ฐ์ ํ์ธํ ๋ ๋งค์ฐ ์ ์ฉํ๋ค.
ref๊ฐ ๋ฐ์ค๋ผ๋ฉด toValue๋ ๋ฐ์ค๋ฅผ ๊น๊ณ ๊ทธ ์์ ๊ฐ์ ๋ฌด์กฐ๊ฑด ํ์ธํ๋ ํจ์
2. toRaw()
Vue์์ ๋ฐ์ํ ์์คํ ์ ์ ๊ฑฐํ๊ณ (= Proxy ๊ป๋ฐ๊ธฐ๋ฅผ ๋ฒ๊ธฐ๊ณ ) ์์ํ ์์ ๊ฐ์ฒด๋ ๊ฐ์ ๋ฐํํ ๋ ์ฌ์ฉํ๋๊ฒ.
Vue์ ๋ฐ์ํ์ ์ ๊ฑฐํ๋ค.
1๏ธโฃ๋ฐ์ํ ๊ฐ์ฒด์ ๋ด๋ถ ์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋
2๏ธโฃ๋ฐ์ํ ์์คํ ์ด ํ์ํ์ง ์์ ๋
์ฌ์ฉํ ์ ์๋ค. "๋ฐ์ํ ์ถ์ ์ ๊ฑฐ ์ญํ "
'Frontend๐จ > Vue3.js๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Vue] Vue-Query ์ด์ ๋ฆฌ (0) | 2025.01.05 |
|---|---|
| [Vue] watch์ ๋ํด ์์๋ณด์ (0) | 2024.12.29 |