This is a modular approach to better organize redux stuff. It was inspired by ducks-modular-redux. However, this handles not only actions
and reducers
, but also selectors
, sagas
, middlewares
etc.
In short, a redux module is:
- A feature with action creators, reducer, selectors, sagas, middlewares and any other thing from the redux ecosystem (see
examples
); - Complete, which means that one feature will not be separated into multiple modules;
- Pluggable, which means that you can always add or remove it to have or not that feature without having to change other redux modules.
Let's say you have an existing project with a bunch of redux entities, such as articles
, users
and comments
, with their own reducers and selectors, as well as action creators or sagas to perform CRUD operations (see examples/resource
).
Now you want to add normalizr to it. Then you realize that you'll need to do a lot of refactor to proper normalize
and denormalize
your entities.
The problem gets even worse if after some time your team decides to remove normalizr. You'll need to refactor everything again.
A redux module would take care of and encapsulate the normalization feature (see examples/entities
).
You'll just need to change your containers to use selectors from the entities
module instead of the articles
, users
and comments
ones.
MIT © Diego Haz