Un redux noob ici. Dans le didacticiel redux de cette partie, en particulier, pourquoi ils n'ont pas fait quelque chose comme ce cas 'todos / todoToggled': {return {... state, ...

0
Abdullah Khaled 16 mars 2021 à 14:19

1 réponse

Meilleure réponse

Pour autant que je sache, map() n'a pas d'effets secondaires

Elle peut avoir des effets secondaires, le fait que la méthode map crée un nouveau tableau ne signifie pas qu'elle ne peut pas avoir d'effets secondaires. Par exemple:

const arr = [{x: 1}, {x: 2}, {x: 3}];
const newA = arr.map(obj => {
  obj.x += 1; // changes the objects in `arr`
  return obj;
});
console.log(newA); // new objects
console.log(arr); // Also changed!

La fonction map obtient une référence à chaque objet, ce qui signifie que lorsque vous modifiez obj, elle le change également dans le tableau d'origine. En conséquence, lorsque vous faites:

todo.completed = !todo.completed

Vous modifiez les objets todo de votre tableau, ce qui vous permet de modifier directement votre état.

Contrairement à ce qui précède, le code présenté:

{
  ...todo,
  completed: !todo.completed
}

Ne change pas la référence d'objet todo, mais plutôt, il prend toutes les clés (propres énumérables) de celui-ci et la place dans un nouvel objet, qui écrase également la clé completed pour contenir la négation (c.-à-d. : opposé) completed valeur booléenne.

4
Nick Parsons 16 mars 2021 à 11:38