0
votes

Accessoires dynamiques au composant enfant réactjs

J'ai un élément de passage de composant parent comme des accessoires à un composant enfant. Une API s'appelle sur la charge de la page à l'aide de ComposantDidMount code> dans le composant parent et l'état initial des données transmis à l'enfant change. Le changement est reflété dans le composant parent mais pas dans le composant enfant.

Voici un extrait de mon code: p>

prêt.js (parent) str forte> p> p> P> XXX PRE>

FORVOSLOSTN.JS (ENFANT) FORT> P>

import React from 'react';
import { render } from 'react-dom';

class ForecloseBtn extends React.Component {
    constructor(props) {
        super(props);
        console.log(this.props);
        this.state = {
            lead_id: this.props.id,
            isForeclosed: this.props.foreclose,
        };
    }

    render() {

        return (
            ......
        )
    }
};

export default ForecloseBtn;


4 commentaires

Pouvez-vous ajouter du code de composantDidMount de parent aussi


Utilisez une fonction Memoze qui ne fonctionne que lorsque les accessoires ont changé. Ou mieux: Faites de votre composant un entier contrôlé et de supprimer toute logique comme celle-ci. Vous pouvez simplement utiliser directement les accessoires à la place.


Lire ce Cela aidera


L'état en enfant ne mettra pas à jour. Vous pouvez directement utiliser cela.Props où vous voulez


4 Réponses :


3
votes

C'est pourquoi, dans votre composant enfant, vous ne prêtez que les accessoires dans le constructeur et définir son état en conséquence; S'ils changent plus tard, vous ne mettez pas à jour l'état du composant enfant, aucun re-rendu ne sera fait.

Il existe plusieurs options pour résoudre les problèmes, les étant les plus faciles n'utilisant pas l'état dans le composant enfant, mais directement accessoires ; Dans ce cas dès que le composant parent est mis à jour, les nouveaux accessoires déclencheront un reformateur de la composante enfant. C'est également la solution la plus propre, vous n'aurez qu'une seule source de vérité, à savoir les accessoires passés de la composante mère à l'enfant.

Alternativement, vous pouvez utiliser composantDidUpdate dans l'enfant et mettre à jour son état sur la base des nouveaux accessoires reçus du parent: xxx / p>


0 commentaires

-1
votes
class ForecloseBtn extends React.Component {
    constructor(props) {
        super(props);
        console.log(props);
        this.state = {
            lead_id: props.id,
            isForeclosed: props.foreclose,
        };
    }

    render() {

        return (
            ......
        )
    }
};
You don't need this before props in child component constructor

1 commentaires

Corriger, cependant, pas vraiment la réponse à la question



1
votes

Vous devez utiliser la méthode ComponentDidUpdate dans votre composant enfant:

componentDidUpdate (prevProps) {
  if(prevProps.id !== this.props.id || prevProps.foreclose !== this.props.foreclose){
    this.setState({
      lead_id: this.props.id,
      isForeclosed: this.props.foreclose,
    })
  }
}


0 commentaires

1
votes

Deux solutions possibles ici:

premier

Avez-vous vraiment besoin de stocker l'état que vous envoyez sous forme de code > Les accessoires du parent sous forme d'état sur l'enfant? Pourquoi ne les utilisez-vous pas comme simple accessoires comme ils sont? Votre enfant rentrera quand ils changeront.

second

Si vous devez absolument stocker ceux comme sur l'enfant sur l'enfant , vous pouvez rendre l'enfant avec une clé projectile qui doit changer quand vous voulez que votre enfant remonte complètement, car vous auriez besoin d'un moyen d'obtenir une fonction de votre constructeur à exécuter à nouveau.

Quelque chose comme: xxx

Vous devez lire ceci, cependant:

Vous n'avez probablement pas besoin d'état dérivé ...


0 commentaires