RTK Query中useGetQuery返回data变为_data的原因排查
问题:useGetQuery解构时
data字段消失,仅存在_data 原本可以正常使用以下解构方式获取数据:
const {data, isSuccess} = useGetQuery();
现在只能写成:
const {_data, isSuccess} = useGetQuery();
同时出现TypeScript错误提示:
Property 'data' does not exist on type. const data: any
附上我的Api切片代码作为参考:
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; import { GetResponse, GetRequest, mapResponse } from '../dto'; export const getApiSlice = createApi({ reducerPath: 'getApi', baseQuery: fetchBaseQuery({ baseUrl: 'localhost:3000/api', prepareHeaders: headers => { headers.set('X-Api-Key', '********'); return headers; }, }), keepUnusedDataFor: 999, endpoints: builder => ({ //get query get: builder.query<GetResponse | undefined, GetRequest>({ query: ({ keywords, page = 1, perPage = 20 }) => `get/?keywords=${keywords}&page=${page}&perPage=${perPage}`, transformResponse: raw => { try { return mapResponse(raw); } catch (error) { console.error('get error:', error); } }, }), }), }); export const { useGetQuery, usePrefetch } = getApiSlice;
可能的原因及解决方法
TypeScript类型缓存异常
IDE的TypeScript服务可能缓存了旧的类型定义,导致无法识别data字段。解决方法:重启IDE,或者在VSCode中按Ctrl+Shift+P选择"TypeScript: Restart TS Server"清除缓存。transformResponse返回值不明确
你的transformResponse在catch块中未显式返回值,默认返回undefined,这会干扰TypeScript对返回类型的推断,进而影响useGetQuery的返回类型定义。可以修改catch块,显式返回undefined或重新抛出错误:transformResponse: raw => { try { return mapResponse(raw); } catch (error) { console.error('get error:', error); return undefined; // 显式返回undefined,明确类型 // 或者重新抛出错误:throw error; } },Redux Toolkit依赖版本变更
检查@reduxjs/toolkit的版本,如果最近有自动更新,新版本可能调整了RTK Query的类型定义。可以回退到之前正常工作的版本测试,比如在package.json中指定版本号后重新安装依赖。IDE插件或配置冲突
若安装了Redux或TypeScript相关第三方插件,可能存在配置冲突。尝试禁用非必要插件后,再检查问题是否解决。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

