0
votes

Impossible de mettre à jour l'état dans ReactJS

Je construis une visualisation de données où j'ai besoin de transmettre les données de l'API au composant graphique. Le composant graphique charge bien pour la première fois mais dans les tentatives ultérieures, la carte ne parvient pas à charger sans erreur. Je soupçonne que cela soit un problème avec les États mis à jour dans la composante graphique. Lors du débogage, je pouvais constater que l'État ne met pas à jour par intermittence en raison de laquelle le graphique ne charge pas. Voici ce que le code ressemble à

homepage.js strong> p> xxx pré>

dans le composant graphique, je reçois les données des accessoires et définissez la Etat et ma compréhension est que chaque fois que l'état change, le graphique devrait être redessiné (cela fonctionne, mais dans certains cas, l'état n'est jamais défini ni défini sur un objet vide en raison de laquelle le graphique n'est pas créé P>

Composant de graphique strong> P>

this.state = {
        chartData: {}
    };
}

componentDidUpdate() {
    let chartData = this.props.chartData;
    //Check before updating the state to avoid infinite dom updates
    if (chartData.labels.length > 0 && this.state.chartData.labels.length ===0) { 
      this.setState({ chartData: chartData });
    }
}

render() {
    return (
        <div className="chartContianer">
            <Line data={this.state.chartData}/>
        </div>
    );
  }


0 commentaires

3 Réponses :


0
votes

Essayez de régler l'état dans la carteComponce en utilisant ComposantwillreceiveProps Méthode de cycle de vie. xxx


1 commentaires

Selon les documents, le composantwillreceiveProps est désigné n'est pas recommandé d'être utilisé. réactjs.org/docs/...



0
votes

passe directement ceci.props.chartData dans le composant graphique déclenchera un titre de rapport au lieu de définir à nouveau un état dans le composant graphique


1 commentaires

Pouvez-vous suggérer quelle est la voie recommandée au lieu de passer les accessoires?



0
votes

Pour quiconque pourrait faire face au même problème, je l'ai résolu en faisant des modifications suivantes

  1. Je mettais à jour l'état et j'appelle la prochaine fonction une après l'autre. Je l'ai changé de manière à ce que la fonction suivante soit appelée dans le rappel de SetState.
  2. Dans le composant enfant, j'ai ajouté une fonction ComposantsHouldUpdatedate () où j'ai ajouté renvoyer un faux pour les re-rendus inutiles

0 commentaires