Allow me to explain:
I’m sure you’re familiar with the method `reduce`. It takes an array and “reduces” it down into a single value. A common use case it summing a group of numbers. [1, 2, 3].reduce((sum, nextNumber) => sum + nextNumber, 0)
The idea behind redux is that the state of app can be computed as the “sum” of all the actions that took place in your app:
[action1, action2, action3].reduce((state, nextAction) => ? , {})
If you notice, it works exactly the same way. This is why it’s called a “reducer”. This is your whole app.
Now obviously, writing a large app like this with lot’s of actions is going to be a big unmaintainable mess or one giant switch statement, you probably want to break this into smaller pieces. This is standard function composition. Often these functions will have the same signature as your reducer, as they’re just having the current state and action passed to them.
One very common use case, is to compose your reducer into one function per domain. One function that takes care of your users, one that takes care of your products, etc. This is so common, that redux exports a utility method called “combineReducers”. This is probably what you’re referring to when you said “my reducers”.
However, this is not the age old event emitter pattern where you “subscribe” random functions to listen to a particular event.
Hopefully that clarifies.