Редьюсер не замыкает цепочку изменения стейта. От получает экшн и возвращает новый стейт. По сути только редьюсер можно "изменять" стейт.
Сохранение данных в localStorage - это тоже сайд эффект, и оно должно происходить в мидлваре.
Например, с redux-thunk:
const asyncAction = () => {
return (dispatch, getState) => {
localStorage.setItem('state', JSON.stringify(getState()))
return dispatch(someAction())
}
}