MCPcopy Create free account
hub / github.com/krasimir/react-in-patterns / combineReducers

Function combineReducers

code/redux/public/app.js:21308–21369  ·  view source on GitHub ↗

* Turns an object whose values are different reducer functions, into a single * reducer function. It will call every child reducer, and gather their results * into a single state object, whose keys correspond to the keys of the passed * reducer functions. * * @param {Object} reducers An object

(reducers)

Source from the content-addressed store, hash-verified

21306 * passed object, and builds a state object with the same shape.
21307 */
21308function combineReducers(reducers) {
21309 var reducerKeys = Object.keys(reducers);
21310 var finalReducers = {};
21311 for (var i = 0; i < reducerKeys.length; i++) {
21312 var key = reducerKeys[i];
21313
21314 if (process.env.NODE_ENV !== 'production') {
21315 if (typeof reducers[key] === 'undefined') {
21316 (0, _warning2['default'])('No reducer provided for key "' + key + '"');
21317 }
21318 }
21319
21320 if (typeof reducers[key] === 'function') {
21321 finalReducers[key] = reducers[key];
21322 }
21323 }
21324 var finalReducerKeys = Object.keys(finalReducers);
21325
21326 var unexpectedKeyCache = void 0;
21327 if (process.env.NODE_ENV !== 'production') {
21328 unexpectedKeyCache = {};
21329 }
21330
21331 var shapeAssertionError = void 0;
21332 try {
21333 assertReducerShape(finalReducers);
21334 } catch (e) {
21335 shapeAssertionError = e;
21336 }
21337
21338 return function combination() {
21339 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
21340 var action = arguments[1];
21341
21342 if (shapeAssertionError) {
21343 throw shapeAssertionError;
21344 }
21345
21346 if (process.env.NODE_ENV !== 'production') {
21347 var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);
21348 if (warningMessage) {
21349 (0, _warning2['default'])(warningMessage);
21350 }
21351 }
21352
21353 var hasChanged = false;
21354 var nextState = {};
21355 for (var _i = 0; _i < finalReducerKeys.length; _i++) {
21356 var _key = finalReducerKeys[_i];
21357 var reducer = finalReducers[_key];
21358 var previousStateForKey = state[_key];
21359 var nextStateForKey = reducer(previousStateForKey, action);
21360 if (typeof nextStateForKey === 'undefined') {
21361 var errorMessage = getUndefinedStateErrorMessage(_key, action);
21362 throw new Error(errorMessage);
21363 }
21364 nextState[_key] = nextStateForKey;
21365 hasChanged = hasChanged || nextStateForKey !== previousStateForKey;

Callers 1

app.jsxFile · 0.90

Tested by

no test coverage detected