Me gustaría proporcionar parámetros adicionales para Inyección de dependencia en Reducer.
Cuando creé la tienda, agregué argumentos como este.
export default configureStore({ reducer, middleware: (getDefaultMiddleware) => getDefaultMiddleware({ thunk: { extraArgument: { service } }, }).concat(logger), devTools: true, });Sé cómo usarlo en la función createAsyncThunk, pero no sé cómo usarlo en otro Reducer. No hay un tercer parámetro.
En el siguiente caso, no hay un tercer factor.
const authSlice = createSlice({ name: 'auth', initialState, reducers: { logout: (state, action, third) => { // third is undefiend!!! it doesn't get value. // but createAsyncThunk does const { extra} = third; const { service } = extra; service.authService.logout(); return { isLoggedIn: false, userId: null, profile: { name: null, }, token: null, }; } },Algo así como su service.authService.logout(); es un efecto secundario y los efectos secundarios nunca se permiten en un reductor de Redux. Un reductor solo puede leer state y la action y (en el caso de createSlice ) modificar state . No se permiten otros efectos secundarios. Así que nada como esto estará disponible en sus reductores.
Sin embargo, podría estar usando el middleware de escucha para esto.
listenerMiddleware.startListening({ actionCreator: authSlice.actions.logout, effect: async (action, listenerApi) => { listenerApi.extra.authService.logout() }, })