Могу ли я заранее связать значение аргумента при использовании redux-действий?

У меня есть действие и сага.

Я хочу указать значение для экземпляра действия изнутри actions.js,

Я также хочу предоставить значение экземпляру action из саги.

Поэтому, когда вызывается редуктор, связанный с действием, он получает два значения в полезной нагрузке.

Как я могу это сделать?

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 */ }) });

1 ответ

Решение

При создании действия вы можете добавить к нему любую полезную нагрузку. Теперь вы просто создаете действие с пустой строкой и без полезной нагрузки.

createAction(type, payloadCreator)

payloadCreator должен быть функцией, неопределенной или нулевой

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

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

в саге put принимает пустой объект с типом (string) и полезной нагрузкой тоже

Например yield put({ type: 'PRODUCTS_RECEIVED', products })

Так что, если createAction возвращает объект с типом и полезной нагрузкой, он будет также использоваться sagas. Вы можете использовать console.log перед yeld, чтобы проверить, что возвращает ваш создатель действий.

console.log('Action for saga:', myAction());    
yield put(myAction()); // How do I supply  payload value "bar" here?
Другие вопросы по тегам