Tengo la siguiente API definida para la consulta RTK:
export const postsApi = createApi({ reducerPath: "postsApi", baseQuery: fetchBaseQuery({ baseUrl: 'https://myservice.co/api/v2/' }), tagTypes: ["Posts"], endpoints: (builder) => ({ getAllPosts: builder.query({ query: () => ({ method: "GET", url: "/posts" }), transformResponse: (response) => response.posts, providesTags: (result) => result ? [ ...result.map(({ id }) => ({ type: "Posts", id })), { type: "Posts", id: "LIST" }, ] : [{ type: "Posts", id: "LIST" }], }), updatePost: builder.mutation({ query: ({ postId, ...body }) => ({ url: `/posts/${postId}`, method: "POST", config: { body }, }), invalidatesTags: (_, __, arg) => [{ type: "Posts", id: arg.id }], }), getPost: builder.query({ query: (postId) => ({ method: "GET", url: `/posts/${postId}`, }), providesTags: (_, __, id) => [{ type: "Posts", id }], }), }), }); export const { useGetAllPostsQuery, useUpdatePostMutation, useGetPostQuery } = postsApi;Lo que me gustaría que hiciera es que cuando updatePost se llama con éxito, solo invalidaría el caché para una sola publicación y usaría la consulta getPost para recuperar la información en lugar de getAllPosts. ¿Es esto posible de todos modos? Las publicaciones se muestran en una tabla obtenida con la consulta getAllPosts.
No. RTK-Query es un caché de documentos (respuesta completa = documento), no un caché normalizado. No sabe nada sobre el contenido de las respuestas almacenadas en caché y su estructura, y nunca intentará "coser" nada allí por sí mismo.
Puede hacerlo manualmente con una actualización optimista, pero todo lo que RTK-Q hace automáticamente es recuperar, lo que debería ser más que suficiente en la mayoría de los casos de uso.