Ben je ooit geconfronteerd met het verlies van reactiviteit in Vue?
sobes.tech AI
Antwoord van AI
Ja, ik heb dat meegemaakt. Het verlies van reactiviteit in Vue 2 trad vooral op in twee gevallen:
- Het direct toevoegen van een nieuwe eigenschap aan een bestaand object. Vue 2 volgt alleen veranderingen voor eigenschappen die aanwezig waren op het moment van creatie.
- Het wijzigen van een array via index of het aanpassen van de lengte. Vue 2 kon dergelijke wijzigingen niet rechtstreeks reactief volgen.
Om deze problemen op te lossen, werden $set methoden voor objecten en mutator-methoden voor arrays (push, pop, shift, unshift, splice, sort, reverse) of op splice gebaseerde methoden gebruikt om elementen te vervangen of de lengte te wijzigen.
// Verlies van reactiviteit bij het toevoegen van een eigenschap
const obj = { a: 1 };
// obj.b = 2; // Niet reactief in Vue 2
// Oplossing met $set
// Vue.$set(obj, 'b', 2);
// Verlies van reactiviteit bij het wijzigen van een array via index
const arr = [1, 2, 3];
// arr[0] = 4; // Niet reactief in Vue 2
// Oplossing met mutator-methoden
// arr.splice(0, 1, 4);
// Oplossing met $set voor arrays (minder gebruikelijk, maar mogelijk)
// Vue.$set(arr, 0, 4);
In Vue 3, met gebruik van Composition API en reactive/ref, evenals een verbeterde proxy-gebaseerde reactiviteitsmotor, zijn deze problemen grotendeels opgelost. Het toevoegen van eigenschappen aan reactieve objecten en het wijzigen van arrays via index of lengte worden standaard reactief.
// Vue 3
import { reactive } from 'vue';
const obj = reactive({ a: 1 });
obj.b = 2; // Reactief in Vue 3
const arr = reactive([1, 2, 3]);
arr[0] = 4; // Reactief in Vue 3
arr.length = 1; // Reactief in Vue 3
Het begrijpen van de oorzaken van het verlies van reactiviteit in Vue 2 blijft echter nuttig bij het werken met legacy-code of bij het overstappen tussen versies.