Slice and compose redux-type reducers.

Herbert Vojčík 470dfee886 subReducer 7 년 전
lib 470dfee886 subReducer 7 년 전
src 470dfee886 subReducer 7 년 전
.gitignore de53914b31 Initial commit 7 년 전
LICENSE de53914b31 Initial commit 7 년 전
README.md 470dfee886 subReducer 7 년 전
package.json 07aec53207 `npm run build` builds via babel 7 년 전

README.md

redux-sac

Slice and compose redux-type reducers.

subReducer(key, reducer, additionalKey, ...)

Creates a wrapper reducer that call reducer on the substate specified by key. You may use dot notation. Rest of the state is left untouched.

	const r = subReducer("persons", personReducer);

    r({persons: ["John", "Jill"], cars: ["Honda"]}, action);
    // => {
    //   persons: personReducer(["John", "Jill"], action), 
    //   cars: ["Honda"]
    // }

Respects redux convention that if no change was made, the identical object should be returned. So in previous case, if personReducer would return the identical array, r would return the state object it was passed in.

If persons were deeper in hierarchy, it could have been created as const r = subReducer("files.persons", personReducer); for example.

You may pass additional keys (also with possible dot-notation) as addition arguments. In that case, additional parts of state will be fetched and passed to a sub-reducer:

	const r = subReducer("persons", personReducer, "assets.cars");

    r({persons: ["John", "Jill"], assets: {cars: ["Honda"]}}, action);
    // => {
    //   persons: personReducer(["John", "Jill"], action, ["Honda"]), 
    //   assets: {cars: ["Honda"]}
    // }

This technique is mentioned in Redux docs, in "Beyond combineReducers" page.