You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何redux-persist会导致RTK queries的isFetching状态持续为true?

问题解答

这不是RTK Query或redux-persist的预期行为,是配置错误导致的状态持久化冲突。

原因分析

RTK Query的内部状态(包括isFetching这类临时请求状态)被redux-persist错误地持久化了。当页面刷新时,之前存储的isFetching: true状态会被重新加载到Redux Store中,而RTK Query无法自动重置这个临时状态,导致钩子始终认为请求处于进行中。

解决方法

配置redux-persist时,必须排除RTK Query生成的状态切片(默认切片名为api,由createApi的reducerPath指定):

import { persistStore, persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import { api } from './path-to-your-api'; // 你的RTK Query实例
import { combineReducers } from '@reduxjs/toolkit';

const persistConfig = {
  key: 'root',
  storage,
  blacklist: [api.reducerPath], // 排除RTK Query的状态
};

const rootReducer = combineReducers({
  [api.reducerPath]: api.reducer,
  // 你的其他reducer
});

const persistedReducer = persistReducer(persistConfig, rootReducer);

如果需要持久化RTK Query的缓存数据,不要用redux-persist直接持久化整个query状态,应该使用RTK Query内置的缓存控制选项(比如keepUnusedDataFor)来管理缓存生命周期,这类设计才符合RTK Query的状态管理逻辑。

内容的提问来源于stack exchange,提问作者Drew Gallagher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:14:57