2017-01-06 2 views
1

Я использую combineReducers Redux (в) вспомогательные функции для объединения двух редукторов, как так:перевождь: вложенная доступа Редуктор другой магазин раздел

const rootReducer = combineReducers({ 
    user: userReducer, 
    accounts: accountsReducer 
}) 

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

Как я могу изменить «пользовательскую» часть моего магазина из моего редуктора учетных записей?

ответ

2

Вы не можете.

Вы можете слушать то же самое действие в обеих редукторах, или если вам необходимо обновить состояние пользователя на основе обновления до состояния средств по счетам, то вы можете использовать Redux санки - https://github.com/gaearon/redux-thunk

const action =() => (dispatch, getState) => { 
    // dispatch action that accounts reducer listens to 
    dispatch({ 
    type: 'SOME_ACTION' 
    }) 

    // get the new accounts state 
    let { accounts } = getState() 

    // dispatch action that user reducer listens to, passing the new accounts state 
    dispatch({ 
    type: 'ANOTHER_ACTION', 
    payload: { 
     accounts 
    } 
    }) 
} 

// call with 
dispatch(action()) 
+0

" слушайте одно и то же действие в обоих редукторах »- означает ли это, что я могу сделать что-то вроде этого: dispatch action, например {type: 'SET_ACTIVE_ACCOUNT', data: data}, затем в редиректоре счетов обрабатывают действие для установки активной учетной записи и пользователя редуктор прослушивает одно и то же событие и модифицирует часть магазина? –

+0

@ GilbertNwaiwu Да, каждый редуктор вызывается, когда действие отправляется. Вы можете обновить состояние нескольких редукторов с 1 действия (при условии, что у вас есть все данные, необходимые для полезной нагрузки вашего действия) –

+1

Хорошо. Спасибо за информацию. Кажется, я что-то читал. Все редукторы вызываются, и их выходные данные хранилища объединяются. –

Смежные вопросы