Evite a manipulação de estado em ações

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.