Méthodes et principes pour modifier des tableaux et objets dans Vue afin de déclencher la mise à jour des vues

Tableaux

Considérons un tableau simple :

const listeElements = ['a', 'b', 'c']; // Un tableau ordinaire

Les opérations suivantes ne déclencheront pas la réactivité de Vue :

this.listeElements[1] = 'x'; // Modifier un élément existant
this.listeElements[3] = 'd'; // Ajouter un nouvel élément
this.listeElements.length = 2; // Modifier la longueur du tableau

Pour un tableau d'objets :

const donneesMessages = [
  { id: 1, selectionne: true, titre: 'alpha' },
  { id: 2, selectionne: false, titre: 'beta' },
  { id: 3, selectionne: true, titre: 'gamma' }
];

Les modifications directes suivantes ne seront pas détectées :

this.donneesMessages[0] = { id: 1, selectionne: true, titre: 'ALPHA' }; // Modifier un élément
this.donneesMessages[3] = { id: 4, selectionne: true, titre: 'DELTA' }; // Ajouter un élément
this.donneesMessages[0].enfant = "Enfant"; // Ajouter une propriété à un élément

Solutions

Utilisation de Array.splice()

La méthode splice(index, nombre, nouvelElement) modifie le tableau en place et peut être utilisée pour ajouter, supprimer ou remplacre des éléments.

Utilisation de this.$set()

La méthode this.$set(tableau, index, nouvelElement) permet de modifier un élément de manière réactive.

// Modification d'un élément existant
this.$set(listeElements, 1, 'x');
this.listeElements.splice(1, 1, 'x');

// Ajout d'un nouvel élément
this.$set(listeElements, 3, 'd');
this.listeElements.splice(3, 0, 'd');

// Modification de la longueur
this.listeElements.splice(2);

// Pour un tableau d'objets
this.$set(donneesMessages, 0, { id: 1, selectionne: true, titre: 'ALPHA' });
this.donneesMessages.splice(0, 1, { id: 1, selectionne: true, titre: 'ALPHA' });

this.$set(donneesMessages, 3, { id: 4, selectionne: true, titre: 'DELTA' });
this.donneesMessages.splice(3, 0, { id: 4, selectionne: true, titre: 'DELTA' });

Méthodes de mutation de tableau dans Vue

Ces méthodes modifient le tableau original et déclenchent la réactivité :

  • push() : Ajoute un élément à la fin et retourne la nouvelle longueur.
  • pop() : Supprime le dernier élément et retourne l'élément supprimé.
  • shift() : Supprime le premier élément et retourne l'élément supprimé.
  • unshift() : Ajoute un élément au début et retourne la nouvelle longueur.
  • splice() : Modifie le contenu du tableau en ajoutant ou supprimant des éléments.
  • sort() : Trie les éléments du tableau et retourne le tableau trié.
  • reverse() : Inverse l'ordre des éléments et retourne le tableau inversé.

D'autres méthodes ne modifient pas le tableau original et retournent un nouveau tibleau, sans déclencher la réactivité :

  • slice() : Extrait une section du tableau et retourne un nouveau tableau.
  • concat() : Fusionne plusieurs tableaux et retourne un nouveau tableau.
  • join() : Joins tous les éléments en une chaîne de caractères.
  • filter() : Crée un nouveau tableau avec les éléments qui passent un test.

Note importante : Modifier directement une propriété d'un élément existant dans un tableau d'objets via l'index déclenche bien la mise à jour de la vue, car la réactivité de Vue observe les propriétés des objets.

this.donneesMessages[0].titre = "ALPHA"; // Cela met à jour la vue

Objets

Pour les objets, des principes similaires s'appliquent. L'utilisation de this.$set() ou la modification directe de propriétés existantes est recommandée pour garantir la réactivité.

Référence

Pour plus de détails sur le principe de réactivité de Vue, consultez la documentation officielle : Vue Reactivity in Depth.

Étiquettes: Vue.js JavaScript tableaux objet Réactivité

Publié le 9 juin à 11h08