求助:RTK Query请求仅开启React Native Debugger Network Inspect时正常工作
可能的原因与解决方案
1. RTK Query 请求头令牌获取存在闭包问题
这是最常见的触发原因:如果创建 fetchBaseQuery 时提前捕获了令牌值,而非每次请求动态从Redux Store中获取,就会导致切换账号后请求仍复用旧令牌。
错误示例:
// 错误:创建API时一次性捕获令牌,后续不会更新 const token = store.getState().auth.token; const baseQuery = fetchBaseQuery({ baseUrl: 'https://your-api-domain.com', prepareHeaders: (headers) => { headers.set('Authorization', `Bearer ${token}`); return headers; }, });
正确写法:在 prepareHeaders 中通过 getState 动态拉取最新令牌:
const baseQuery = fetchBaseQuery({ baseUrl: 'https://your-api-domain.com', prepareHeaders: (headers, { getState }) => { // 每次请求都从Store获取最新令牌 const token = getState().auth.token; if (token) { headers.set('Authorization', `Bearer ${token}`); } return headers; }, });
2. RTK Query 缓存未清理导致旧数据残留
登出时如果没有重置RTK Query的缓存状态,切换账号后会返回之前缓存的、用旧令牌请求的数据,看起来像是令牌未更新。
在登出逻辑中添加缓存重置操作:
// 导入你的API实例 import { api } from './path-to-your-api-slice'; const handleLogout = () => { // 重置RTK Query的所有缓存与状态 dispatch(api.util.resetApiState()); // 执行你的登出逻辑(如清除Auth状态) dispatch(authSlice.actions.logout()); };
同时可检查 keepUnusedDataFor 配置,若设置过长(默认60秒)也可能导致旧数据残留,可按需调整:
const api = createApi({ reducerPath: 'api', baseQuery, keepUnusedDataFor: 30, // 缩短未使用数据的缓存时长 endpoints: (builder) => ({ /* 你的端点配置 */ }), });
3. React Native Fetch 全局缓存干扰
React Native 原生 fetch 存在默认缓存行为,而RN Debugger的Network Inspect会自动禁用缓存,导致调试时正常、非调试时异常。
可在请求头中添加禁用缓存的配置:
const baseQuery = fetchBaseQuery({ baseUrl: 'https://your-api-domain.com', prepareHeaders: (headers, { getState }) => { const token = getState().auth.token; if (token) { headers.set('Authorization', `Bearer ${token}`); } // 添加禁用缓存的请求头 headers.set('Cache-Control', 'no-cache'); headers.set('Pragma', 'no-cache'); return headers; }, });
4. 登录后未主动触发数据刷新
切换账号登录后,若未主动触发相关查询的重新获取,RTK Query会继续使用缓存数据。可在登录成功后手动调用查询的 initiate 方法:
const handleLogin = async (credentials) => { const result = await dispatch(authApi.endpoints.login.initiate(credentials)).unwrap(); // 登录成功后,重新拉取用户相关数据 dispatch(api.endpoints.getUserData.initiate()); };
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

