Migré a RTK y lo disfruté inmensamente hasta ahora, pero una cosa en la que me quedé atascado es la siguiente situación:
Tenemos (para mantenerlo simple) dos puntos finales:
Y el sitio web en sí está alojado en otro dominio.
Necesito obtener datos del punto final del cliente, pero para actualizar ciertas cosas, necesito realizar una mutación en el punto final del pedido. Al principio pensé que debería definir un createApi por URL base, pero luego estoy bastante seguro de que no puedo tener la invalidación. Me gustaría que esta mutación anterior invalide los datos del cliente, de modo que se vuelvan a obtener los nuevos datos.
Así que esto es lo que se me ocurrió, pero me gustaría alguna opinión sobre si esta es la forma de avanzar.
export const customerApi = createApi({ reducerPath: "/../", baseQuery: fetchBaseQuery({ baseUrl: "https://www.domain-customer.com/" }), endpoints: (builder) => ({ // write provides tag stuff here getCustomerExample: builder.query({ query: (name) => `customer/${name}` }), // please ignore the details of the mutation, I haven't practiced much with it yet. updateCustomer: builder.mutation({ queryFn: async (name) => { const response = await fetch( `https://www.domain-order.com/updateCustomer`, {update mutation stuff here} ); const data = await response.json(); return { data }; } // write invalidate stuff here }) }) });¿Es esta la manera de hacerlo? ¿O debería incluso haber un createAPI gigante que contenga todas las mutaciones y consultas?
En general, sí, debe tener una sola createApi si los datos están lo suficientemente conectados como para invalidarlos.
Tenga en cuenta que, si bien la mayoría de los ejemplos solo muestran consultas a algo en baseQuery , también puede obtener un parámetro de url (o cadena) devuelto desde una query que contiene un dominio completo: fetchBaseQuery 100 % compatible con ese caso de uso.
Entonces en tu caso:
updateCustomer: builder.mutation({ query: (name) => ({ url: `https://www.domain-order.com/updateCustomer`, // update mutation stuff here }) // write invalidate stuff here })