0
votes

Comment puis-je obtenir Redux State avant que le composant renouille?

en raison de Comment les flux de données via React-Redux applications, des données mises à jour Dans le magasin n'est pas disponible dans un composant réactif tant que ce composant renouille.

Ma pose est, dans un composant donné, j'aimerais utiliser le magasin mis à jour sans em> re-rendant le composant. Je cherche à faire quelque chose comme ceci: p> xxx pré>

ceci ne fonctionne pas strong>, car accessoires code> n'est pas mis à jour avant MyComponent renouille. Je ne peux pas appeler ceci.props.a.find (a => a.name === "valeur"); code> car les accessoires n'auront pas la valeur "A" la plus récente. Dans mon cas, je ne peux pas attendre que MyComponent soit rendu. Quelles sont mes options pour accéder à l'état le plus récent de MyComponent? P>

J'ai fait quelque chose comme ça, mais c'est absolument horrible mais ça marche ... P>

func(){
    if (this.props.step1){
        // Add item to A
        this.props.addAItem("value");

        this.props.setStep2();
    } else if (this.props.step2) {
        // Get id of newly added item in A
        let addedA = this.props.A.find(a => a.name === "value");

        this.props.setStep3();
    }
    // etc...
}


4 commentaires

Je ne comprends pas la question. - Lorsque les mises à jour de Redux Store, les accessoires de votre composant changeront et une répercussentation se produira (en supposant que vous n'ayez pas implumé une méthode de Compolpoentupdate). Pourquoi voudriez-vous que les composants, l'état interne change sans un titre de plus en plus?


@dwjohnston La raison de ce mode de pensée est que toutes les actions sont censées se produire comme une seule unité, je ne peux pas avoir de rendu de MyComponent, comme cela vous demanderait de cliquer sur cela

à nouveau. J'ai besoin de multiples modifications à l'état (tirant des identifiants d'éléments simples récemment insérés).


Un composant RERENDER ne réinitialisera pas l'état du composant. Il suffit de définir l'état du composant sur l'OnCliquez, puis envoyez-vous?


@dwjohnston Mon composant s'appuie sur la valeur du magasin. La valeur du magasin (mappée comme des accessoires) ne se met pas à jour tant que le composant reçoit de nouveaux accessoires (et le composant est re-rendu). Tout fonctionnerait bien, à l'exception de ma fonction nécessite une entrée de l'utilisateur. Ainsi, après avoir appelé ma première expédition, le composant renouré et mon fonctionnement () ne continue pas d'exécuter, cela a-t-il un sens?


3 Réponses :


-1
votes

devrait faire le tour


0 commentaires

1
votes

OK Si je comprends votre question correctement, votre méthode de fonctionnement Func ADDITEMB est alors additemb dépend de la réponse de Addiditema, Addidit serait une opération ASYNC, donc dans votre action supplémentaire lorsque vous ajoutez l'article que vous pouvez simplement revenir à votre action. Ce qui résout le retour de l'identifiant de l'élément nouvellement créé et de l'intérieur de votre composant, vous pouvez gérer dans un bloc d'AN alors que xxx

espère qu'il aide


5 commentaires

Oui, je pense que cela devrait faire l'affaire, merci pour votre réponse!


Si la réponse a aidé, veuillez envisager d'accepter et de voter, à acclamer :)


Cela m'a beaucoup appris, mais maintenant je vois que "les actions doivent être des objets simples. Utilisez le middleware personnalisé pour les actions ASYNC". Une fois que je découvre plus de détails, je voudrais mettre cela à côté de cette question et l'accepter.


Je pense que vous retournez la fonction de Action Creator, vous pouvez utiliser Redux-thunk pour résoudre ce problème, car par des actions par défaut sont des objets JSL, Redux-thunk vous permet de retourner la fonction des créateurs d'action, espérons qu'il clarifie


Merci @ibtsam. J'ai fini par prendre une approche différente qui fonctionne, s'il vous plaît voir ma réponse pour plus de clarification. Merci de votre aide.



0
votes

faire à un lot de bilan et d'avant, et des tests, j'ai couru dans de nombreux murs essayant de comprendre celui-ci mais finalement compris. Voici ce que vous devez faire.

Remarque: Ceci n'est pas considéré comme faisant partie de l'API publique Redux Reagux et peut se casser sans préavis. Nous reconnaissons que la communauté utilise des cas où cela est nécessaire et essaiera de permettre aux utilisateurs de créer des fonctionnalités supplémentaires au-dessus de Reag Exsix, mais notre utilisation spécifique du contexte est considérée comme un détail de la mise en œuvre. Si vous avez des cas d'utilisation supplémentaires qui ne sont pas suffisamment couverts par les API actuels, veuillez déposer un problème pour discuter d'éventuelles améliorations de l'API. - https: //react-redux.js .Org / Utilisation-React-Redux / Accès-Magasin # Utiliser-ReacTreDuxContext-directement

Assurez-vous que votre package React est 16.8.3 ou ultérieur. Assurez votre 7.1 ou supérieur. Vous avez besoin de ces versions en raison de la nouvelle façon (en réagissant 16.8.3) réagir sur le contexte des composants de l'enfant. Nous nous soucions du contexte parce que ce nouveau réact de contexte API est la manière dont le REACEREDUXCONTEXT fonctionne.

Le REACTREDUXCONTEXT est la sauce magique dont nous avons besoin pour obtenir l'état actuel du magasin Un composant. Notez les modifications dans notre composant ci-dessous. xxx

the magic est store.getstate () qui retourne le redouplement mis à jour Magasin.

Je veux souligner que j'ai largement regardé à Redux-thunk , mais cette approche n'a pas fini par donner ce dont j'avais besoin. Le problème principal est l'utilisation de BindACeCreators dans mon composant. Parce que j'utilise BindACeCreators , toute action que j'appelle attend un objet vide, qui est envoyé au Redu Storage.

J'ai tenté de nombreuses façons d'essayer de renvoyer l'état de Redux mis à jour dans une action, mais que j'utilisais BindACeCreators, je ne pouvais pas retourner la valeur de l'état de Redux à partir d'une action donnée. Le seul moyen de récupérer un état actualisé de Redux Store sans s'appuyer sur le composant lui-même à mettre à jour / re-rendu consiste à utiliser la méthode que je décris ci-dessus.


0 commentaires