MCPcopy
hub / github.com/reduxjs/redux / replaceReducerExtender

Function replaceReducerExtender

test/typescript/enhancers.ts:119–183  ·  test/typescript/enhancers.ts::replaceReducerExtender

* replaceReducer with a store enhancer

()

Source from the content-addressed store, hash-verified

117 * replaceReducer with a store enhancer
118 */
119function replaceReducerExtender() {
120 interface ExtraState {
121 extraField: string
122 }
123
124 const enhancer: StoreEnhancer<{ method(): string }, ExtraState> =
125 createStore =>
126 <S, A extends Action, PreloadedState>(
127 reducer: Reducer<S, A, PreloadedState>,
128 preloadedState?: PreloadedState | undefined
129 ) => {
130 function wrapReducer<PreloadedStateToWrap>(
131 reducer: Reducer<S, A, PreloadedStateToWrap>
132 ): Reducer<S & ExtraState, A, PreloadedStateToWrap & ExtraState> {
133 return (state, action) => {
134 const newState = reducer(state, action)
135 return {
136 ...newState,
137 extraField: class="st">'extra'
138 }
139 }
140 }
141 const wrappedPreloadedState = preloadedState
142 ? {
143 ...preloadedState,
144 extraField: class="st">'extra'
145 }
146 : undefined
147 const store = createStore(wrapReducer(reducer), wrappedPreloadedState)
148 return {
149 ...store,
150 replaceReducer(nextReducer: Reducer<S, A>) {
151 store.replaceReducer(wrapReducer(nextReducer))
152 },
153 method: () => class="st">'foo'
154 }
155 }
156
157 interface PartialState {
158 someField?: class="st">'string'
159 test?: boolean
160 }
161
162 const initialReducer: Reducer<PartialState, Action> = () => ({
163 someField: class="st">'string'
164 })
165 const store = createStore<
166 PartialState,
167 Action,
168 { method(): string },
169 ExtraState
170 >(initialReducer, enhancer)
171
172 const newReducer = (state: PartialState = { test: true }, _: Action) => state
173
174 store.replaceReducer(newReducer)
175 store.getState().test
176 store.getState().extraField

Callers

nothing calls this directly

Calls 3

createStoreFunction · 0.85
replaceReducerMethod · 0.80
getStateMethod · 0.65

Tested by

no test coverage detected