如何使用 RTK 查询获取 X-Total-Count 标头?

v.z*_*cev 6 reactjs redux-toolkit rtk-query

不知道如何在请求后访问标头。未使用的文档示例x-total-count

const guitarApi = createApi({
  reducerPath: 'GUITARS',
  baseQuery: fetchBaseQuery({ baseUrl: API_URL }),
  endpoints: (builder) => ({
    getAllGuitars: builder.query<AllGuitarsResponse, number>({
      query: (limit = 1) => `${APIRoute.Guitars}_limit${limit}`,
    }),
  }),
});
Run Code Online (Sandbox Code Playgroud)

我像这样将它们放入组件中

const { data: guitarData } = useGetAllGuitarsQuery(searchingParams);
Run Code Online (Sandbox Code Playgroud)

我在哪里可以访问响应标头?

phr*_*hry 15

你可以用transformResponse这个,它有签名

  transformResponse?(
    baseQueryReturnValue: BaseQueryResult<BaseQuery>,
    meta: BaseQueryMeta<BaseQuery>,
    arg: QueryArg
  ): ResultType | Promise<ResultType>
Run Code Online (Sandbox Code Playgroud)

如果你使用fetchBaseQuerymeta将会

type FetchBaseQueryMeta = { request: Request; response?: Response }
Run Code Online (Sandbox Code Playgroud)

所以你可以这样写你的端点:

const guitarApi = createApi({
  reducerPath: 'GUITARS',
  baseQuery: fetchBaseQuery({ baseUrl: API_URL }),
  endpoints: (builder) => ({
    getAllGuitars: builder.query<{ apiResponse: AllGuitarsResponse, totalCount: number}, number>({
      query: (limit = 1) => `${APIRoute.Guitars}_limit${limit}`,
      transformResponse(apiResponse, meta) {
        return { apiResponse, totalCount: Number(meta.response.headers.get('X-Total-Count')) }
      }
    }),
  }),
});
Run Code Online (Sandbox Code Playgroud)