0

我有一个动作和一个传奇。

我想从内部为动作实例提供一个值actions.js

我还想从 saga 内部为动作实例提供一个值。

因此,当调用与动作关联的 reducer 时,它会在有效负载中接收两个值。

我怎样才能做到这一点?

动作.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?
}

减速器.js

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

1 回答 1

1

当你创建一个动作时,你可以添加任何你想要的负载。现在,您只需使用裸字符串创建操作,而无需有效负载。

createAction(type, payloadCreator)

payloadCreator 必须是函数、未定义或 null

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

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

在 sagas 中 put 也接受类型(字符串)和有效负载的裸对象

例如yield put({ type: 'PRODUCTS_RECEIVED', products })

因此,如果 createAction 返回带有类型和有效负载的对象,那么 sagas 也会使用它。您可以在 yeld 之前使用 console.log 来检查您的操作创建者返回的内容。

console.log('Action for saga:', myAction());    
yield put(myAction()); // How do I supply  payload value "bar" here?
于 2017-10-20T10:44:48.733 回答