Cómo utilizar RTK Query y Redux Thunk en la misma aplicación de React?
Tengo un requisito en el que debo usar RTK Query para la recuperación de datos y Redux-thunk para la administración del estado global. Para esto, he creado 2 almacenes separados, uno para RTK y otro para Redux. Ahora estoy enfrentando un problema ya que no deberíamos tener 2 almacenes en nuestra aplicación.
Almacén 1:
import { createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
import combineReducer from './combineReducer';
export const configureStore = () : any => {
const middleWares = [thunk];
const middlewareEnhancer = applyMiddleware(...middleWares);
const enhancers = [middlewareEnhancer];
const composedEnhancers: any = compose(...enhancers);
const store = createStore(combineReducer, composedEnhancers);
return store;
};
Almacén 2:
import { configureStore } from "@reduxjs/toolkit";
import { setupListeners } from "@reduxjs/toolkit/query";
import { postApi } from "../services/posts";
export const store = configureStore({
reducer: {
[postApi.reducerPath]: postApi.reducer,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware().concat(postApi.middleware),
});
setupListeners(store.dispatch);
App.tsx:
“`
const App: React.FC = () => (
Loading…
}>
Estoy seguro de que hay algo sospechoso en esto. Cualquier solución para el requisito sería apreciable.
davy.ai
Deberías tener solo una tienda en tu aplicación. Para cumplir con el requisito de utilizar tanto RTK query para la obtención de datos como Redux-thunk para la gestión de estado global, puedes integrarlos juntos. Para hacer esto, puedes aprovechar el middleware
redux-thunk
que viene con RTK.Puedes definir tu tienda de la siguiente manera:
Aquí, estamos utilizando el método
createAsyncThunk
de RTK para definir un creador de acciones diff para la obtención de usuarios, y adjuntando el middleware proporcionado porfetchUsers.middleware
. También hemos combinado todos los reducers mediante el métodocombineReducer
.Ahora, puedes utilizar el creador de acciones
fetchUsers
en tus componentes para obtener datos y tener el estado global gestionado por una sola tienda. Por ejemplo:Aquí, estamos utilizando el gancho
useSelector
para seleccionar el estadousers
de la tienda, y el ganchouseDispatch
para despachar la acciónfetchUsers
cuando el componente se monta. El componente renderizará el estado de carga siusers.loading
es verdadero y el estado de error siusers.error
es verdadero. De lo contrario, renderizará la lista de usuarios obtenidos desde la API.Al integrar RTK query y Redux-thunk de esta manera, puedes tener una sola tienda para gestionar tanto el estado local como el remoto.