我们正在构建一个React.js Web应用程序,我们一直使用RTK Query作为API调用的工具,因为它使用起来很方便。然而,我们注意到每个 API 调用的状态都是全局存储的。
鉴于我们有大量的 API 调用,我担心对性能的潜在影响。
有没有办法使用 RTK 查询而不全局存储状态?
我尝试寻找其他方法,但未能找到一些答案。
我认为它值得怀疑,因为 RTK Query“是 Redux Toolkit 包中包含的可选插件,其功能构建在 Redux Toolkit 中的其他 API 之上”(https://redux-toolkit.js.org/rtk -查询/概述)。
从本质上讲,RTK Query 旨在与 Redux 配合使用,Redux 本身就以“集中应用程序的状态”作为其核心优势之一。 (https://redux.js.org/)
我不太熟悉应用程序性能,所以我也有兴趣听到有关此线程的其他一些评论,但是如果您将响应状态存储在组件本地(例如使用 Axios),那不是一样的吗?如果您将其存储在 Redux 中,那么会像这样调用吗?我们不会在任何地方复制状态,所以您不是只存储一次响应数据吗?
我知道的唯一解决方案如下所示:
import type { AnyAction, ThunkAction } from '@reduxjs/toolkit';
import type { QueryDefinition } from '@reduxjs/toolkit/query';
import type { QueryActionCreatorResult } from '@reduxjs/toolkit/dist/query/core/buildInitiate';
import type { AppDispatch } from '@/js/redux/store';
async function queryWithoutCache<
T extends QueryDefinition<any, any, any, any, any>,
>(
dispatch: AppDispatch,
endpoint: ThunkAction<QueryActionCreatorResult<T>, any, any, AnyAction>
) {
const query = dispatch(endpoint);
const response = await query.unwrap();
query.unsubscribe();
return response;
}
(async () => {
const data = await queryWithoutCache(store.dispatch, api.endpoints.getData.initiate());
}())
其中
api
是createApi从'@reduxjs/toolkit/query/react'返回的结果。
有关数据请参阅。