์ค๋ช
๐ watch : ์์ค๋ฅผ ๊ฒ์ฌํ์ฌ ๋์์ ์ํํ๋์ง ํ๋ณํ ํ ์ฝ๋ฐฑํจ์๋ฅผ ํธ์ถ
Type
// ํ๋์ ์์ค ๊ฐ์
function watch<T>(
source: WatchSource<T>,
callback: WatchCallback<T>,
options?: WatchOptions
): StopHandle
// ์ฌ๋ฌ ๊ฐ์ ์์ค ๊ฐ์
function watch<T>(
sources: WatchSource<T>[],
callback: WatchCallback<T[]>,
options?: WatchOptions
): StopHandle
type WatchCallback<T> = (
value: T,
oldValue: T,
onCleanup: (cleanupFn: () => void) => void
) => void
type WatchSource<T> =
| Ref<T> // ref
| (() => T) // getter
| T extends object
? T
: never // ๋ฐ์ํ ๊ฐ์ฒด
interface WatchOptions extends WatchEffectOptions {
immediate?: boolean // ๊ธฐ๋ณธ ๊ฐ: false
deep?: boolean // ๊ธฐ๋ณธ ๊ฐ: false
flush?: 'pre' | 'post' | 'sync' // ๊ธฐ๋ณธ ๊ฐ: 'pre'
onTrack?: (event: DebuggerEvent) => void
onTrigger?: (event: DebuggerEvent) => void
once?: boolean // ๊ธฐ๋ณธ ๊ฐ: false (3.4+)
}
์ฌ์ฉ๋ฒ
reactive๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
() => managerFormValue.managerId์ ๊ฐ์ด ํจ์๋ฅผ ์ฌ์ฉํ์ฌ managerFormValue.managerId๋ฅผ ๊ฐ์ธ์ผ ํ๋ค.
watch(() => managerFormValue.managerId, () => {
clearError();
});
์ฐจ์ด์ ์ ์๊ฒ ๋๊ฐ? ๋ชจ๋ฅด๋ฉด ๊ทธ๋ฅ ์ด๋ ๊ฒ ์จ๋ผ.
ref๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
ref๋ก ๋ง๋ค์ด์ง ๊ฒฝ์ฐ์๋ .value์์ฑ์ ์ค์ ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
watch(managerFormValue.managerId, () => {
clearError();
});
watch ํจ์์ ๋๊ฐ์ง ํํ
1. ๋จ์ผ ์์ฑ์ ๊ฐ์ํ ๊ฒฝ์ฐ
watch(
() => managerFormValue.managerId,
(newValue, oldValue) => {
// ์์ฑ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ์คํ๋๋ ๋ก์ง
}
);
managerFormValue.managerId์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ, ์ด ์ฝ๋ฐฑ ํจ์๋ ์ ๊ฐ(newValue)๊ณผ ์ด์ ๊ฐ(oldValue)์ ์ธ์๋ก ๋ฐ์ ์คํ๋๋ค.
2. ์ฌ๋ฌ ์์ฑ ๊ฐ์ํ ๊ฒฝ์ฐ
watch(
[() => managerFormValue.managerId, () => managerFormValue.managerPwd],
(newValues, oldValues) => {
// ์์ฑ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ์คํ๋๋ ๋ก์ง
}
);
managerFormValue.managerId์ managerFormValue.managerPwd ๋ ์์ฑ์ ๋ณ๊ฒฝ์ ํจ๊ป ๊ฐ์ํ๊ณ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์ฝ๋ฐฑ ํจ์๋ ๊ฐ์ ์ค์ธ ๋ชจ๋ ์์ฑ์ ์ ๊ฐ๋ค(newValues)๊ณผ ์ด์ ๊ฐ๋ค(oldValues)์ Array ํํ๋ก ๋ฐ์ ์คํ๋๋ค.
watch๋ฅผ ์ฌ์ฉํด๋ ๋ฐ๋ก ๋ฐ์๋์ง ์์ ๋, ๋น๋๊ธฐ์ฒ๋ฆฌํ ๋
๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ๋ฉด์ ๋น๋๊ธฐ์ฒ๋ฆฌํ์ฌ ์์ ํ๋ ค ํ์์ผ๋, ๋ฐ๋ก ๊ฐ์งํ์ง ๋ชปํ์์ ๋ ํด๊ฒฐํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ nextTick() ์ฌ์ฉํ๊ธฐ!
nextTick() : Vue ์ปดํฌ๋ํธ์์ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๊ณ , ํด๋น ์์ ์ด DOM ์ ๋ฐ์ดํธ ์ฌ์ดํด๊ณผ ์ฐ๊ด์ด ์์ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋
๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ํตํด, ํธ์ถ๋๋ ๋ชจ๋ API๋ฅผ ํ์ธํ๊ณ , API๊ฐ ๋ชจ๋ ์ฒ๋ฆฌ ๋๋ฉด ์์ ์ ์ํํ๋๋ก ํ๊ณ ์ถ์๋ค.
watch(searchDate, async () => {
await nextTick();
try {
emitter.emit('showLoading');
await callApis();
} catch (err) {
handleApiError(err);
} finally {
emitter.emit('hideLoading');
}
});
'์ธ์ด > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
pinia ์ค์น ๋ฐ ์ ํ (0) | 2024.03.29 |
---|---|
Props & Emit (0) | 2024.03.29 |
v-slot (0) | 2024.03.29 |
v-on @ ํํ์ truthy ๊ธฐ๋ฐ ์ด๋ฒคํธ ๊ด๋ฆฌ ์์ฑ (0) | 2024.03.29 |
v-bind : ๋ฐ์ดํฐ ์ฐ๊ฒฐ - ๋ฐ์ธ๋ฉ ์์ฑ (0) | 2024.03.29 |