【问题标题】:RTK query not refreshing - why?RTK 查询不刷新 - 为什么?
【发布时间】:2023-01-25 02:03:26
【问题描述】:

我有一个 RTK 查询,在删除突变后没有刷新它的核心内容。谁能解释为什么?我不清楚问题出在哪里,因为在任何时候都没有提出刷新请求。

代码看起来不错,它与我在另一个可用的 API 中使用的代码几乎相同。在第二个 API 上,我传递了相同的数据(项目列表),并且在删除后刷新良好;这是代码:

:

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
import { Auth, API, Storage } from 'aws-amplify';

// Define a service using a base URL and expected endpoints
export const researchApi = createApi({
    reducerPath: 'researchApi',
    tagTypes: ['Research'],
    
    baseQuery: fetchBaseQuery({ 
        baseUrl: process.env.NEXT_PUBLIC_API_RESEARCH,
        prepareHeaders: async (headers, { getState }) => {
            const token = (await Auth.currentSession()).getIdToken().getJwtToken();
            headers.set('Authorization', `${token}`);     
            headers.set('Content-Type', 'application/json');       
            return headers;
        }
    }),
    endpoints: (builder) => ({

      getResearch: builder.query({
        query: () => `research`,
        providesTags: ['Research']
      }),

      getResults: builder.query({
        query: (id) => `results?searchid=${id}`,
      }),

      addResearch: builder.mutation({
        query(keywords) {
            const data = {
                keywords: keywords
            }
          return {
            url: `research`,
            method: 'POST',
            body: data
          }
        },
        invalidatesTags: ['Research']
      }),

      deleteResults: builder.mutation({
        query(results) {

            // send array
            let sanitized;
            sanitized = results.filter(item => item);
            
            const data = {
                items: sanitized
            }
            //console.log('data: ', data);
          return {
            url: `removeresult`,
            method: 'DELETE',
            body: data
          }
        },
        invalidatesTags: ['Research']
      }),
      

    }),
  })
  
// Export hooks for usage in functional components, which are
// auto-generated based on the defined endpoints
export const {  useGetResearchQuery, useGetResultsQuery, useAddResearchMutation, useDeleteResultsMutation } = researchApi


我这样调用查询:



    const router = useRouter()
    const { kwd } = router.query
    const { data, error, isError, isLoading } = useGetResultsQuery(kwd);

    if(isLoading) {
        return ( 
            <>
                <Spinner animation="border"  size="sm" role="status" />{' '} Please wait while Loading...
            </>
        )
    }

任何想法都会非常有帮助,因为我完全迷失了这个......

【问题讨论】:

  • 你如何识别如果它令人耳目一新?您是否在 devtools 的“网络”窗格中寻找(但没有看到)发生的请求?
  • 另外:是否设置了中间件?
  • 一旦删除发生,我应该在 API 上收到 GET 请求,但我没有在控制台上收到

标签: reactjs redux react-redux rtk-query


【解决方案1】:

好的,问题解决了,我没有添加正确的参数:

getResearch: builder.query({ 查询:() => research, 提供标签:['研究'] }),

  getResults: builder.query({
    query: (id) => `results?searchid=${id}`,
     providesTags: ['Research'] // ========> THAT WAS MISSING
  }),

【讨论】:

    【解决方案2】:

    尝试并确保您从突变中返回正确的数据。谢谢。

    从突变中返回正确的字段。如果需要的字段,可以是id没有从突变中返回,那么就不会刷新。

    【讨论】: