是否可以使用RTK查询而不将结果和响应存储在全局状态中?

问题描述 投票:0回答:2

我们正在构建一个React.js Web应用程序,我们一直使用RTK Query作为API调用的工具,因为它使用起来很方便。然而,我们注意到每个 API 调用的状态都是全局存储的。

鉴于我们有大量的 API 调用,我担心对性能的潜在影响。

有没有办法使用 RTK 查询而不全局存储状态?

我尝试寻找其他方法,但未能找到一些答案。

javascript reactjs redux redux-toolkit rtk-query
2个回答
0
投票

我认为它值得怀疑,因为 RTK Query“是 Redux Toolkit 包中包含的可选插件,其功能构建在 Redux Toolkit 中的其他 API 之上”(https://redux-toolkit.js.org/rtk -查询/概述)。

从本质上讲,RTK Query 旨在与 Redux 配合使用,Redux 本身就以“集中应用程序的状态”作为其核心优势之一。 (https://redux.js.org/)

我不太熟悉应用程序性能,所以我也有兴趣听到有关此线程的其他一些评论,但是如果您将响应状态存储在组件本地(例如使用 Axios),那不是一样的吗?如果您将其存储在 Redux 中,那么会像这样调用吗?我们不会在任何地方复制状态,所以您不是只存储一次响应数据吗?


0
投票

我知道的唯一解决方案如下所示:

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'返回的结果。

有关数据请参阅

© www.soinside.com 2019 - 2024. All rights reserved.