J'ai lu la documentation de Démarrage rapide de React ;

Que vous déclariez un composant comme fonction ou comme classe, il ne doit jamais modifier ses propres accessoires

C'est une fonction "pure", car elle n'essaye pas de changer ses entrées, et retourne toujours le même résultat pour les mêmes entrées:

function sum(a, b) {
  return a + b;
}

Ceci dans une fonction "impure", car il change sa propre entrée: https://codesandbox.io/s/9z38xv4x7r

function SayHi(props) {
  props.name = "Jim"; // TypeError Cannot assign to read only property 'name' of object '#<Object>'
  return <h1>Hi {props.name}!</h1>;
}

Pourquoi les accessoires React sont-ils en lecture seule?

14
ratskin 24 nov. 2017 à 13:21

3 réponses

Meilleure réponse

Un composant doit gérer son propre état, mais il ne doit pas gérer ses propres accessoires. props est essentiellement "un état géré par le propriétaire du composant". C'est pourquoi les accessoires sont immuables .

React docs recommande également de traiter l'état comme s'il était immuable. En effet, en manipulant directement this.state, vous contournez la gestion des états de React, ce qui peut être potentiellement dangereux car appeler setState() par la suite peut remplacer la mutation que vous avez effectuée.

24
Chicken Soup 24 nov. 2017 à 10:42

Le props d'un composant react est destiné à stocker les valeurs et les fonctions de son composant parent. C'est juste le motif, les accessoires sont immuables. Si vous voulez avoir une variable qui serait mutable, stockez-la dans l'état du composant. Les états sont mutables.

1
cdaiga 24 nov. 2017 à 10:29

Vous pouvez considérer le composant React comme une fonction de ses props et state. Au fur et à mesure que vous avancez dans la documentation, vous constaterez que c'est le cas, car la plupart des fonctions du cycle de vie du composant React ont des signatures de la forme (prop, state) => { //code }.

Les documents React définissent props comme toute entrée arbitraire donnée à un composant , et le composant rendra quelque chose basé sur props (et parfois aussi sur state, s'il s'agit d'un avec état composant). Donc props est comme quelque chose qui est donné au composant pour, par exemple, référence. Imaginez-le de cette façon: vous êtes un composant, et votre composant parent vous donne un livre de référence, contenant quelques règles sur la façon dont vous devez vous comporter (a.k.a. render). Deux cas peuvent se présenter:

  1. Vous êtes stupide ( apatride ): Vous venez de lire le livre et vous vous comportez ainsi.
  2. Vous êtes intelligent ( avec état ): Vous lisez le livre, puis notez certaines choses dans votre bloc-notes, que vous pouvez afficher, mettre à jour ou supprimer. Vous pouvez même copier le contenu du livre dans votre bloc-notes, puis modifier le bloc-notes.

Dans tous les cas, vous ne pouvez pas mettre à jour le livre de référence qui vous a été remis. Seul le composant parent peut le mettre à jour (par exemple, vous donner un autre livre ou modifier son contenu).

Je ne sais pas si c'est une représentation correcte, mais les composants React fonctionnent de la même manière. Vous comprendrez bientôt. Assurez-vous de lire également Penser dans React. Bon codage!

7
Dane 24 nov. 2017 à 11:15
47471131