Slice and compose redux-type reducers.

Herbert Vojčík 9251d4d636 cow: Allow post parsed keys as second argument. 7 anni fa
lib 9251d4d636 cow: Allow post parsed keys as second argument. 7 anni fa
src 9251d4d636 cow: Allow post parsed keys as second argument. 7 anni fa
.gitignore de53914b31 Initial commit 7 anni fa
LICENSE de53914b31 Initial commit 7 anni fa
README.md 84c22176cf Fix README. 7 anni fa
package.json 07aec53207 `npm run build` builds via babel 7 anni fa

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.

composeReducers(reducer1, reducer2, ...)

Creates a wrapper reducer that calls passed reducers one after another, passing intermediate states. and returning the result of the last one.

Useful to "concatenate" a few subReducers. like:

	composeReducers(
	    subReducer("files.persons", personReducer, "assets.swag"),
	    subReducer("files.clients", clientReducer, "news"),
	    subReducer("assets", assetReducer),
	    baseReducer
	)