RTK查询无法设置标签id

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

我正在尝试设置 RTK 查询,但在定义标签 ID 时遇到一些麻烦。

无论我尝试什么,我似乎都无法使“Timeseries”标签与 id 一起使用。

这是我的API:

export type GetTimeseriesProps = {
    datasource: InsightshubDataSource
    from: string,
    to: string
}
export const valuesightApi = createApi({
    reducerPath: "valuesightQuery",
    baseQuery: fetchBaseQuery({ baseUrl: import.meta.env.VITE_VALUESIGHT_BACKEND_URL }),
    tagTypes: ['Dashboard', 'Timeseries'],
    endpoints: (builder) => ({
        getDashboardById: builder.query<Dashboard, void>({
            query: (id) => `/vsapi/Dashboard/${id}`,
            providesTags: (result, error, arg) => [
                { type: 'Dashboard', id: Number(arg) },
            ]
        }),
        getTimeseriesFromTo: builder.query<TimeSeriesData[], GetTimeseriesProps>({
            query: (props) => ({
                url: `/vsapi/Timeseries/${props.datasource.assetId}/${props.datasource.aspectName}/${props.datasource.variableName}`,
                method: 'GET',
                params: {
                    from: props.from,
                    to: props.to
                }
            }),
            providesTags: (result, error, arg) => [{
                type: 'Timeseries',
                id: String(arg.datasource.assetId)
            }]
        }),

    }),
});



每当我进行新的 Timeseries 查询时,它都会自动获取整个参数 (arg) 对象作为 id,而不仅仅是 arg.datasource.assetId。

这与仪表板配合得很好,但是正如我在扩展程序的 RTK 查询选项卡中看到的那样:

因此,如果我不提供 Id,也会发生同样的事情,因此似乎由于某种原因无法解析参数

reactjs redux rtk-query
1个回答
0
投票

标签仅用于查询/突变端点验证。

参见:

查询端点可以提供特定标签,突变端点可以使其无效并触发查询自动重新运行。

您在 Redux-Devtools 中看到的内容 不是 标签,这些是查询缓存键。缓存键是 Redux-Toolkit Query 的“发布/订阅”机制的一部分。

参见

serializeQueryArgs

默认情况下,该函数将接受查询参数,对对象进行排序 键(如果适用),将结果字符串化,并将其与 端点名称。这将根据组合创建一个缓存键 参数 + 端点名称(忽略对象键顺序),这样 使用相同参数调用任何给定端点将导致 相同的缓存密钥。

在这里,我将提供的缓存标签标记为绿色,将查询缓存键标记为红色。您可以使用查询缓存键查看当前的查询和订阅,并且提供的标签将特定标签映射到特定查询缓存键。

但是,您可以使用

createApi
serializeQueryArgs
函数(上面引用的说明)或每个端点的
serializeQueryArgs
函数(下面)提供自己的自定义缓存键。

可以提供根据查询返回自定义的缓存键值 争论。

这主要适用于不可序列化值的情况 作为查询参数对象的一部分传递,应从 缓存键。它也可以用于端点应该只 有单个缓存条目,例如无限加载/分页 实施。

与只能返回字符串的

createApi
版本不同,这个 每个端点选项还可以返回对象、数字或布尔值。 如果它返回一个字符串,该值将用作缓存键 直接地。如果它返回一个对象/数字/布尔值,该值将 被传递给内置的
defaultSerializeQueryArgs
。这简化了 剥离您不希望包含在中的参数的用例 缓存密钥。

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