Slice and compose redux-type reducers.
Herbert Vojčík 84c22176cf Fix README. | há 7 anos atrás | |
---|---|---|
lib | há 7 anos atrás | |
src | há 7 anos atrás | |
.gitignore | há 7 anos atrás | |
LICENSE | há 7 anos atrás | |
README.md | há 7 anos atrás | |
package.json | há 7 anos atrás |
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 subReducer
s. like:
composeReducers(
subReducer("files.persons", personReducer, "assets.swag"),
subReducer("files.clients", clientReducer, "news"),
subReducer("assets", assetReducer),
baseReducer
)