Sobes.tech
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:

  1. 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ī.
  2. 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.