Допустим, есть условно 10 редьюсеров. Один из них реагирует на action.type ADD_ITEM
И получается что при вызове этого экшна (ADD_ITEM), редакс проходится по всем редьюсерам и если там есть switch-case на ADD_ITEM, то он что-либо обрабатывает, а если нет, то просто возвращает стейт?
т.е, при каждом вызове любого экшна, редакс всё время обходит полностью все редьюсеры?
Именно так. В примере много лишнего, поскольку он форкнут из полноценного официального, но обратите внимание, что на любой экшен в консоль выводится две записи - по одной из каждого редьюсера: https://codesandbox.io/s/ecstatic-night-yv27q
Но бояться этого не стоит, это никак не сказывается на видимой скорости работы приложения.
Я читал не только документацию, но ещё и исходники. И то, что вы написали с ними не сходится, поэтому я и пытаюсь понять - это я что-то не понял или вы что-то не то написали. Как, например, в схему "экшен обращается к своему редьюсеру" укладываются мидлвари? Почему одно событие можно обрабатывать в нескольких редьюсерах?
И почему в документации написано следующее, если это экшен выбирает какой редьюсер вызвать?
The logic inside reducer functions typically follows the same series of steps:
Check to see if the reducer cares about this action
If so, make a copy of the state, update the copy with new values, and return it
Otherwise, return the existing state unchanged
The Redux store has a method called dispatch. The only way to update the state is to call store.dispatch() and pass in an action object. The store will run its reducer function and save the new state value inside
The resulting reducer calls every child reducer, and gathers their results into a single state object. The state produced by combineReducers() namespaces the states of each reducer under their keys as passed to combineReducers()