0
votes

Comment puis-je modifier mon code sans problème de constat ()?

J'ai ce code dans mon constructeur: xxx

J'ai la fonction d'édition où je lis la valeur d'événement dans mon entrée: xxx

Mais es-je donnez-moi cet avertissement:

Ne pas muter l'état directement. Utilisez instate () réagir / non-directe-mutation-état

Que puis-je faire dans ce cas? Peut-être changez-vous en quelque sorte la ligne avec l'attribution event.target.value dans SETState () ?


1 commentaires

Créez une copie de l'état, puis militez la copie.


6 Réponses :


1
votes

Une façon dont j'ai tendance à partir est de faire une copie du tableau d'abord, puis de modifier un élément dedans ou de modifier la matrice elle-même, puis définissez l'état xxx

vous pouvez Voulez-vous profondément cloner le tableau dans certains cas, parfois pas.


2 commentaires

Ce n'est pas correct. Vous aurez toujours une référence car la matrice est une gamme d'objets.


Tous les composants ne réagissent pas ne nécessitent pas de copie en profondeur de tout.



0
votes

Vous êtes correct, que le problème est avec la ligne:

const {value} = event.target;
this.setState(prevState => update(prevState, {[id]: {user: {$set: value}}}));


0 commentaires

2
votes

Vous pouvez utiliser mapper () pour créer une copie de tests xxx


0 commentaires

0
votes
edit(id, event) {
    var newNote = {...this.state.tests[id]}
    newNote.user = event.target.value
    this.setState({ tests: [...this.state.tests, newNote]})
}

1 commentaires

S'il vous plaît expliquer votre réponse à fond.



0
votes

Lorsque l'état n'est pas lourd, j'utilise les codes suivants: xxx pré>

mise à jour: j'ai trouvé Immer le résout parfaitement. P>

import produce from 'immer'

edit (id, event) {
  this.setState(
    produce(draft => draft.tests[id].user = event.target.value)
  )
}


0 commentaires

0
votes

Tout d'abord, lorsque vous essayez de définir un nouvel état à l'aide des données de l'état précédent, vous devez utiliser la mise à jour en fonction de la fonction. https://reactjs.org/docs/react-component.html#setstate

const edit = (id, event) => {
  this.setState((prevState) => {
    const tests = [...prevState.tests];
    tests[id] = {
      ...tests[id],
      user: event.target.value
    };
    return {
      ...prevState,
      tests
    };
  });
};


0 commentaires