diff --git a/src/createDispatcher.js b/src/createDispatcher.js index fee186f062..5b1b36bac9 100644 --- a/src/createDispatcher.js +++ b/src/createDispatcher.js @@ -13,10 +13,10 @@ export default function createDispatcher(store, middlewares = []) { return state; } - if (typeof middlewares === 'function') { - middlewares = middlewares(getState); - } + const finalMiddlewares = typeof middlewares === 'function' ? + middlewares(getState) : + middlewares; - return composeMiddleware(...middlewares, dispatch); + return composeMiddleware(...finalMiddlewares, dispatch); }; } diff --git a/test/createRedux.spec.js b/test/createRedux.spec.js index 977f5f6289..1900de351c 100644 --- a/test/createRedux.spec.js +++ b/test/createRedux.spec.js @@ -53,4 +53,20 @@ describe('createRedux', () => { ]); expect(changeListenerSpy.calls.length).toBe(1); }); + + it('should use existing state when replacing the dispatcher', () => { + redux.dispatch(addTodo('Hello')); + + let nextRedux = createRedux({ todoStore }); + redux.replaceDispatcher(nextRedux.getDispatcher()); + + let state; + let action = (_, getState) => { + state = getState().todoStore; + }; + + redux.dispatch(action); + + expect(state).toEqual(redux.getState().todoStore); + }); });