我正在尝试设置 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,也会发生同样的事情,因此似乎由于某种原因无法解析参数
标签仅用于查询/突变端点验证。
参见:
查询端点可以提供特定标签,突变端点可以使其无效并触发查询自动重新运行。
您在 Redux-Devtools 中看到的内容 不是 标签,这些是查询缓存键。缓存键是 Redux-Toolkit Query 的“发布/订阅”机制的一部分。
serializeQueryArgs
:
默认情况下,该函数将接受查询参数,对对象进行排序 键(如果适用),将结果字符串化,并将其与 端点名称。这将根据组合创建一个缓存键 参数 + 端点名称(忽略对象键顺序),这样 使用相同参数调用任何给定端点将导致 相同的缓存密钥。
在这里,我将提供的缓存标签标记为绿色,将查询缓存键标记为红色。您可以使用查询缓存键查看当前的查询和订阅,并且提供的标签将特定标签映射到特定查询缓存键。
但是,您可以使用
createApi
的 serializeQueryArgs
函数(上面引用的说明)或每个端点的 serializeQueryArgs
函数(下面)提供自己的自定义缓存键。
可以提供根据查询返回自定义的缓存键值 争论。
这主要适用于不可序列化值的情况 作为查询参数对象的一部分传递,应从 缓存键。它也可以用于端点应该只 有单个缓存条目,例如无限加载/分页 实施。
与只能返回字符串的
版本不同,这个 每个端点选项还可以返回对象、数字或布尔值。 如果它返回一个字符串,该值将用作缓存键 直接地。如果它返回一个对象/数字/布尔值,该值将 被传递给内置的createApi
。这简化了 剥离您不希望包含在中的参数的用例 缓存密钥。defaultSerializeQueryArgs