Skip to content

Commit 33c8a5d

Browse files
rbrewingtonkwelch
authored andcommitted
fix(custom-reducers): bypass combine reducer when state is empty and no custom reducers
Only calls `combineReducers` if there are reducers to call it with.
1 parent 0d0bc38 commit 33c8a5d

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/index.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,14 @@ const resolveAction = (reducers = {}, state, action) => {
3333
[curr]: noOpReducer,
3434
};
3535
}, {});
36-
return combineReducers(Object.assign({}, baseReducers, reducers))(
37-
state,
38-
action
39-
);
36+
const mergedReducers = Object.assign({}, baseReducers, reducers);
37+
if (Object.keys(mergedReducers).length) {
38+
return combineReducers(Object.assign({}, baseReducers, reducers))(
39+
state,
40+
action
41+
);
42+
}
43+
return state;
4044
};
4145

4246
export default (

src/index.spec.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,4 +198,15 @@ describe('entitiesReducer', () => {
198198
console.error = error;
199199
/* eslint-enable no-console */
200200
});
201+
202+
it('should handle no custom reducers and empty initial state', () => {
203+
/* eslint-disable no-console */
204+
const error = console.error;
205+
console.error = jest.fn();
206+
const result = entitiesReducer({})({}, {});
207+
expect(console.error).not.toHaveBeenCalled();
208+
expect(result).toEqual({});
209+
console.error = error;
210+
/* eslint-enable no-console */
211+
});
201212
});

0 commit comments

Comments
 (0)