Certains comment les données de correspondance proviennent de la classe parent et j'ai initialisé les correspondances à l'aide de useState(match) Cependant, les données de correspondance contiennent des données anciennes et n'ont pas été mises à jour en tant que données de correspondance parent. Quelqu'un aide-t-il?

const FixtureDetailItem = ({ type, match, teams, isAdmin, postMatchesStart, putMatchesStart }) => {
  console.log(match)
  const [matches, setMatches] = useState(match);
  const { homeTeamId, homeTeamName, homeScore, awayTeamId, awayTeamName, awayScore, scheduledAt, location, league, matchRecords} = matches;

  useEffect(() => {
    console.log('fired')
    console.log(matches)
    setMatches(matches)
  }, [matches]);
2
Jake Kwon 9 févr. 2020 à 01:31

1 réponse

Meilleure réponse

Il semble y avoir une connexion circulaire entre useEffect() et useState - useEffect a une dépendance de matches, puis définit des correspondances.

Si vous voulez qu'il change lorsque match change, alors match devrait être la dépendance.

Notez que useState(match) ne se déclenche qu'au tout premier rendu. Lors des rendus suivants, vous devez utiliser setMatches() pour modifier la valeur de matches.

const FixtureDetailItem = ({ type, match, ... }) => {

  const [matches, setMatches] = useState(match);
  const { ... } = matches;

  useEffect(() => {
    setMatches(match)
  }, [match]);

  ... // JSX here

}

@James J'ai pensé que cela pourrait nécessiter des éclaircissements.

Voir ma déclaration ci-dessus - useState(match) ne se déclenche que lors du tout premier rendu.

Au premier rendu, useState(match) définit matches égal à match.

Ensuite, le parent change match, et parce que la prop de correspondance a changé, la fonction FixtureDetailItem s'exécute à nouveau, mais React n'exécute pas useState(match) pour la nouvelle valeur (par conception).

Il considère matches comme l'état interne de ce composant et le laisse avec l'ancienne valeur.

Étant donné que matches ne change pas, l'effet ne s'exécutera pas - il ne s'exécute que lorsque l'une de ses dépendances change.

2
Richard Matsen 9 févr. 2020 à 03:07