Reducer<State, Action, Environment>.combine constructor

Reducer<State, Action, Environment>.combine(
  1. List<Reducer<State, Action, Environment>> reducers
)

Combines multiple reducers into one.

Each reducer runs in order on the same action, threading state through sequentially. Effects from all reducers are merged for concurrent execution.

final appReducer = Reducer.combine([
  featureAReducer.pullback(...),
  featureBReducer.pullback(...),
]);

Implementation

factory Reducer.combine(List<Reducer<State, Action, Environment>> reducers) => Reducer(
      reduce: (state, action, environment) {
        final List<Effect<Action>> effects = [];
        var s = state;
        for (final reducer in reducers) {
          final (state: newState, effect: effect) = reducer.reduce(
            s,
            action,
            environment,
          );
          effects.add(effect);
          s = newState;
        }
        return (state: s, effect: Effect.merge(effects: effects));
      },
    );