Middle
Kas yra 'watch' ir 'computed' Vue.js, ir kaip jie veikia?
sobes.tech AI
Atsakymas iš AI
stebėjimas (watch)
- Naudojamas reaktyvios savybės pakeitimo reakcijai.
- Leidžia atlikti asinchronines operacijas, atidėti vykdymą arba atlikti sudėtingus skaičiavimus, kai savybės reikšmė keičiasi.
- Konfigūruojama naudojant
watchparinktį komponento viduje. - Gali turėti parametrus
handler(funkcija apdorotojas),deep(gili stebėsena vidinių objektų/masyvų) irimmediate(vykdyti apdorotoją kuriant komponentą).
Pavyzdys:
watch: {
// Stebi `firstName` savybės pokytį
firstName(newValue, oldValue) {
console.log(`Vardas pasikeitė iš ${oldValue} į ${newValue}`);
},
// Giliai stebi `userInfo` objektą
userInfo: {
handler(newValue, oldValue) {
console.log('Vartotojo informacija pasikeitė.');
},
deep: true
}
}
apskaičiuotos savybės (computed)
- Naudojamos ** deklaratyviai kurti priklausomas reaguojančias duomenis**.
- Rezultatas kapsuliuojamas tol, kol nesikeičia jo priklausomybės.
- Skaičiuojama iš lėto, tik kai į ją kreipiamasi.
- Konfigūruojama naudojant
computedparinktį komponento viduje. - Turi grąžinti reikšmę.
Pavyzdys:
computed: {
// Apskaičiuoja pilną vardą pagal `firstName` ir `lastName`
fullName() {
return `${this.firstName} ${this.lastName}`;
},
// Filtruoja naudotojų sąrašą
filteredUsers() {
return this.users.filter(user => user.isActive);
}
}
Pagrindiniai skirtumai
| Bruožas | watch | computed |
|---|---|---|
| Paskirtis | Reaguoti į savybės pokytį | Apskaičiuoti priklausomus duomenis |
| Kapsuliavimas | Ne | Taip (pagal priklausomybes) |
| Lėtas | Ne | Taip |
| Grąžinimo reikšmė | Ne (vykdo šalutinį efektą) | Taip (grąžina apskaičiuotą reikšmę) |
| Asinchroniškumas | Taip | Ne |
| Sintezė | Objekto su funkcijomis apdorojėjais | Objekto su funkcijomis, grąžinančiomis reikšmę |
Naudokite computed gauti reaguojančius duomenis, kurie yra išvestiniai iš kitų duomenų. Naudokite watch vykdyti šalutinius efektus (pvz., API skambučius, DOM pakeitimus), kai keičiasi reaguojančios savybės reikšmė, arba vykdyti sudėtingesnes logines reakcijas.