2017-10-20 12 views
0

J'ai une action et une saga.Puis-je lier une valeur d'argument à l'avance lors de l'utilisation de redux-actions?

Je souhaite fournir une valeur à l'instance d'action à l'intérieur de actions.js.

Je souhaite également fournir une valeur à l'instance d'action depuis l'intérieur de la saga. Par conséquent, lorsque le réducteur associé à l'action est appelé, il reçoit deux valeurs dans la charge utile.

Comment est-ce que je peux faire ceci?

actions.js

import { createAction } from 'redux-actions'; 
export const myAction = createAction('ACTION_NAME'); // How do I supply payload value "foo" here? 

sagas.js

function* mySaga({ 
    yield put(myAction()); // How do I supply payload value "bar" here? 
} 

reducers.js

export default handleActions({ 
    'ACTION_NAME': handleReduce(state, { payload: { foo, bar } }) => 
    { /* foo and bar should be defined */ }) }); 

Répondre

1

Lorsque vous créez un actio n vous pouvez ajouter n'importe quelle charge utile à ce que vous voulez. Vous venez de créer une action avec une chaîne vide et sans charge utile.

createAction(type, payloadCreator)

payloadCreator doit être une fonction, non définie, ou null

createAction('ACTION_NAME',() => { reuturn {foo: 'bar'}; })

https://github.com/reduxactions/redux-actions/blob/master/docs/api/createAction.md#createactiontype-payloadcreator-createactiontype-payloadcreator

Sagas mis accepte objet nu de type (string) et la charge utile trop

E.g. Par conséquent, si createAction renvoie un objet avec le type et la charge utile, il sera également utilisé par les sagas. Vous pouvez utiliser console.log avant yeld pour vérifier ce que votre créateur d'action renvoie.

console.log('Action for saga:', myAction());  
yield put(myAction()); // How do I supply payload value "bar" here? 
+0

La charge utile ajoutée lors de la création de l'action est-elle fusionnée avec la charge utile supplémentaire fournie ultérieurement? – Ben

+0

@Ben a ajouté plus de détails à la réponse principale –

+0

S'il vous plaît marquer comme réponse acceptée si aide :) –