Evite o desejo de manipular o estado em suas ações. É mais provável que você entre em condições de corrida. Não há garantia de que as ações serão resolvidas em ordem.
// BAD!!!
export const UPDATE_INBOX = 'UPDATE_INBOX';
export const readMail = (mail) => (dispatch, getState, { api }) => {
// optimistically update all mail to read
const read = mail.map((letter) => (
{ ...letter, read_at: letter.read_at || new Date() }
));
dispatch({ type: UPDATE_INBOX, mail: read });
// GOOD!!!
export const READ_MAIL = 'READ_MAIL';
export const readMail = () => (dispatch, getState, { api }) => {
// optimistically update all mail to read
dispatch({ type: READ_MAIL });
// mail reducer
switch (action.type) {
case READ_MAIL:
return state.map(m => ({ ...m, read_at: m.read_at || new Date() }));
Aproveite a natureza síncrona da loja para evitar o estado de zumbi.