2017-10-16 7 views
0

J'ai une méthode dans mon action qui interagit avec le serveur et en raison de la façon dont il est mis en place:Comment définir var appel de fonction ou d'une action au composant

function generateDoc(specs) { 
    // Gen start ! 
    InterfaceCard.setState({ showhide: true }); 
    // loop : 
    const promises = []; 
    specs.forEach((spec) => { 
     if (spec) promises.push(generateChain(spec)); 
    }); 
    // gen end! 
    InterfaceCard.setState({ showhide: false }); 
} 

peut me donner un début et et à la fin à ma génération de document.

Je voudrais sur // Gen start ! et // gen end! placer un appel ou une var modification qu'un composant peut recevoir.

(évidemment mon courant InterfaceCard.setState({ showhide: false }); ne fonctionnent pas.)

« InterfaceCard » est même pas le composant groupé avec ce fichier d'action. C'est en fait l'action de son enfant (mais c'est très bien.) Si je dois utiliser des accessoires pour revenir en arrière une fois que j'ai au moins atteint le composant associé à l'action en cours, alors ce n'est pas vraiment un problème. Ce qui me dérange, c'est que je ne connais pas un moyen de communiquer de retour d'une action à un composant sans utiliser d'appel (et de réponse) d'un serveur. Pardonnez-moi les docs sur ce ne devaient pas être trouvés.

merci!

MISE À JOUR:

Je suis à:

function generateDoc(specs) { 
    show(); 
    const promises = []; 
    specs.forEach((spec) => { 
     if (spec) promises.push(generateChain(spec)); 
    }); 
    hide(); 
} 

function show() { 
    const pay = true; 
    return dispatch => dispatch({ ...types.ALERT, pay }); 
} 

function hide() { 
    const pay = true; 
    return dispatch => dispatch({ ...types.ALERTN, pay }); 
} 

Ces derniers ne distribuent pas. mais si je fais ceci:

function generateDoc(specs) { 
    const promises = []; 
    specs.forEach((spec) => { 
     if (spec) promises.push(generateChain(spec)); 
    }); 
    const pay = true; 
    return dispatch => dispatch({ ...types.ALERTN, pay }); 
} 

l'envoi final ne dépêche mais il saute par-dessus le code au milieu et omet complètement.

donc le premier ancien me semble mieux puisque (si je comprends bien) il me permet d'avoir trois retours en séquence. Le problème est qu'ils refusent d'expédier avec cette configuration je ne sais pas pourquoi.

MISE À JOUR:

cela a fonctionné:

function generateDoc(specs) { 
    const promises = []; 
    specs.forEach((spec) => { 
     if (spec) promises.push(generateChain(spec)); 
    }); 
    return (dispatch) => { 
     setTimeout(() => { 
      dispatch(show()); 
     }, 1); 
     setTimeout(() => { 
      dispatch(hide()); 
     }, 9000); 
    }; 
} 

function show() { 
    const pay = true; 
    return { ...types.ALERT, pay }; 
} 

function hide() { 
    const pay = true; 
    return { ...types.ALERTN, pay }; 
} 
+0

ce qui ne va pas avec seulement 'Promise.all (promesses) .alors (() => InterfaceCard.setState ({showhide: false}))' - en dehors de supposer que vous pouvez définir l'état d'un composant - ce devrait être votre propre état et passé via '' –

+0

il doit vraiment provenir de l'action avec la configuration que j'ai en boucle sur les multiples appels doit se produire dans l'action et c'est pas mon appel. – tatsu

Répondre

1

Vous pouvez envoyer une action et réducteur lié changer quelques accessoires. Puis dans votre composant, vous pouvez écouter les changements de ces accessoires en utilisant shouldComponentUpdate ou componentWillReceiveProps.

function show() { 
    return { ...types.ALERT, pay } 
} 

function hide() { 
    return { ...types.ALERTN, pay } 
} 

function generateDoc(specs) { 
    return dispatch => { 
    dispatch(show()); 
    dispatch(hide()); 
    }  
} 
+0

ça sonne bien. mais je ne suis pas sûr de comprendre si vous pouvez donner un exemple de code dans votre réponse concernant les différents fichiers. – tatsu

+0

Je suis presque là (en implémentant ce que tu as dit) mais je n'ai aucune idée de comment faire un 'dispatch' sans un' retour 'et je ne peux pas le faire avec un retour car il y en a deux et j'ai besoin le reste du code à lire. – tatsu

+0

'this.dispatch ({... types.ALERT});'? – tatsu