Redux provides a convenient helper for combining many reducers called combineReducer
, but it focuses in on specific attributes on our state, making it incompatible with using the State ADT. We would like a way to avoid keeping all of our reducers in a single file and want the ability to still combine them in a manner that works with the State
ADT.
So we will put together our own helper that we also call combineReducers
, but explore how we can use the First
Monoid and mreduceMap
to get us all the power that the Redux helper provides, but setup for our unique needs. As a bonus we will get a sneak peak of the power of using the flip
combinator to create easy to read compositions without pesky argument juggling
// combineReducers :: [ Reducer ] -> Reducer /* export const combineReducers = reducers => action => mreduceMap(First, applyTo(action), reducers); */ // We take reducers first and action second, but we use action first, reducers second. // It is good case to use flip /* export const combineReducers = flip(action => mreduceMap(First, applyTo(action)) );*/ // We can use compose to remove action param, applyTo will get action // Then the return result will be passed into mreduceMap(First) export const combineReducers = flip( compose( mreduceMap(First), applyTo ) );
[Functional Programming ADT] Combine Multiple State ADT Based Redux Reducers
原文:https://www.cnblogs.com/Answer1215/p/10355624.html