83 votes

Comment écouter les changements de propriétés spécifiques dans le magasin Redux après la distribution d'une action ?

J'essaie actuellement de conceptualiser comment gérer l'envoi d'une action dans un composant en fonction d'un changement de données après un envoi dans un autre composant.

Prenez ce scénario :

dispatch(someAjax) -> propriété dans les mises à jour de l'état.

Après cela, j'ai besoin d'un autre composant dépendant de cette même propriété pour savoir qu'elle a été mise à jour et envoyer une action basée sur la nouvelle valeur.

Plutôt que d'utiliser un type de value.on(change... quelle est la meilleure façon de gérer ce type d'action en "cascade" ?

105voto

PinkiNice Points 531

Vous pouvez utiliser l'outil de Redux mapStateToProps y connect avec l'outil React componentDidUpdate(prevProps, prevState, snapshot) crochet.

Donc, en gros, votre code pourrait ressembler à ceci :

const mapStateToProps = (state) => ({ 
   specificProperty: state.specificProperty,
   // any props you need else
});

class YourComponent extends React.Component {
    render() {
      // render your component  
    }

    componentDidUpdate(prevProps, prevState, snapshot) {
        if (prevProps.specificProperty !== this.props.specificProperty) {
            // Do whatever you want
        }
    }
}

YourComponent = connect(mapStateToProps)(YourComponent);

2 votes

Correspond aux balises fournies, alors

2 votes

Joli. Aussi, une possible faute de frappe ? Voulez-vous dire nextProps.specificProperty !== this.props.specificProperty ?

1 votes

@BrunoCarvalhal, si vous n'utilisez pas react, il y a probablement une meilleure option, en fonction de votre framework JS, que redux ;)

69voto

markerikson Points 442

Il existe deux approches de base : soit un intergiciel qui modifie l'état après l'exécution d'une action, soit l'utilisation de la fonction de bas niveau de Redux. store.subscribe API.

La FAQ de Redux a une réponse qui couvre ceci . Aussi, je garde une liste catégorisée d'addons et d'utilitaires liés à Redux, et cela inclut un groupe de bibliothèques d'abonnement de changement de magasin existant qui mettent en œuvre diverses approches pour écouter les changements de données.

1 votes

Merci pour cette liste, c'est vraiment utile. Ce que j'essaie de comprendre, c'est la meilleure façon d'informer plusieurs composants que des données sont revenues d'un appel AJAX et que la clé X a changé. Chacun de ces composants pourrait alors déclencher ses propres actions. Je peux obtenir les changements dans le middleware, mais la partie que j'essaie de comprendre est ce qu'il faut faire lorsque le changement est détecté. J'ai l'impression qu'une sorte de bus d'événements est nécessaire, mais cela ne semble pas compatible avec Redux. Des conseils à ce sujet ?

1 votes

La principale approche recommandée pour la communication dans React et Redux est que les parents passent des props aux enfants, et que les enfants exécutent des callbacks pour notifier les parents. Cependant, d'autres approches comme les bus d'événements ont certainement leur utilité, et si un bus d'événements correspond à votre cas d'utilisation, allez-y. Vous pouvez regarder ctheu.com/2015/02/12/… y andrewhfarmer.com/composant-communication par exemple.

4 votes

Bien que vous n'ayez pas répondu spécifiquement à la question, le premier élément de votre liste a fonctionné dans mon cas. redux-watch est un moyen simple et créatif d'obtenir cette fonctionnalité. Merci encore pour cette liste, elle est utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X