Middle+
Vai jūs kādreiz esat saskāries ar reakcijas zudumu Vue?
sobes.tech AI
Atbilde no AI
Jā, esmu saskāries. Reaktivitātes zudums Vue 2 galvenokārt notika divos gadījumos:
- Jauna īpašība tieši pievienota esošam objektam. Vue 2 seko izmaiņām tikai tajās īpašībās, kas bija definētas objekta izveides brīdī.
- Masīva modifikācija pēc indeksa vai tā garuma izmaiņas. Vue 2 nevarēja tieši sekot šādām izmaiņām.
Šo problēmu risināšanai tika izmantoti $set metodes objektiem un mutatoru masīvu metodes (push, pop, shift, unshift, splice, sort, reverse) vai splice bāzēti metodes elementu maiņai/paplašināšanai.
// Reaktivitātes zudums, pievienojot īpašību
const obj = { a: 1 };
// obj.b = 2; // Nav reaktiši Vue 2
// Risinājums ar $set
// Vue.$set(obj, 'b', 2);
// Reaktivitātes zudums, mainot masīvu pēc indeksa
const arr = [1, 2, 3];
// arr[0] = 4; // Nav reaktiši Vue 2
// Risinājums ar mutatoru metodēm
// arr.splice(0, 1, 4);
// Risinājums ar $set masīviem (retāk lietots, bet iespējams)
// Vue.$set(arr, 0, 4);
Vue 3 ar Composition API un reactive/ref, kā arī uzlabotu proxy balstītu reaktivuma motoru, šīs problēmas būtiski atrisina. Pievienot īpašības reaktiviem objektiem un mainīt masīvus pēc indeksa vai to garuma kļūst pēc noklusējuma reaktiši.
// Vue 3
import { reactive } from 'vue';
const obj = reactive({ a: 1 });
obj.b = 2; // Reaktivi Vue 3
const arr = reactive([1, 2, 3]);
arr[0] = 4; // Reaktivi Vue 3
arr.length = 1; // Reaktivi Vue 3
Tomēr ir noderīgi saprast, kāpēc Vue 2 zaudē reaktiškumu, strādājot ar novecojušo kodu vai pārejot starp versijām.