-
Notifications
You must be signed in to change notification settings - Fork 1
Reducer Composition
ChiefVenzox edited this page Jun 5, 2026
·
1 revision
As apps grow, split reducer logic into small reducers and compose them.
let appReducer = combineReducers(
counterReducer,
settingsReducer,
profileReducer
)Reducers run in order.
Use pullback to lift a local reducer into parent state.
struct AppState: State {
var profile: ProfileState
var settings: SettingsState
}let appReducer = combineReducers(
pullback(profileReducer, state: \.profile),
pullback(settingsReducer, state: \.settings)
)Effect reducers compose the same way:
let appEffectReducer = combineEffectReducers(
pullback(profileEffectReducer, state: \.profile),
pullback(settingsEffectReducer, state: \.settings)
)Features/
Profile/
ProfileState.swift
ProfileAction.swift
ProfileReducer.swift
ProfileView.swift
Settings/
SettingsState.swift
SettingsAction.swift
SettingsReducer.swift
SettingsView.swift
App/
AppState.swift
AppReducer.swift
MyApp.swift
This keeps each feature focused and makes reducers easy to test.