我有一个API,它有一个名为"region"的参数,应用于请求头中.该区域是动态的,随着用户在站点中的操作而变化,并且因为它不是请求URL/参数的一部分,所以我必须使用serializeQueryArgs
:
serializeQueryArgs: args => {
const region = localStorage.getItem('region');
return `${region}_${defaultSerializeQueryArgs(args)}`;
}
这可以防止API混淆不同区域的缓存条目,这很好,但它不会像我希望的那样导致请求与新区域一起重新获取.
我认为我可以使用缓存标签来完成自动重取,方法是在API的定义中添加一个标签类型,然后在区域发生变化时使该标签无效:
export const apiSlice = createApi({
tagTypes: ['region'],
// Other stuff.
});
const changeRegion = region => {
dispatch(setRegion(region));
dispatch(apiSlice.util.invalidateTags([cloudTag]));
}
这真是太棒了!问题是,对于我想要重新获取的每个端点,我必须添加标记:
providesTags: ['region']
我有数百个终结点,所以这并不实际,强制每个添加新终结点的人都记得添加标记,而不会忘记它似乎……挺难的.我真的希望能够一口气将标签添加到每个端点.
我想也许enhanceEndpoints
可以做到这一点,但我不确定如何使用它.理想情况下,我希望有这样一个简明的解决方案:
export const apiSlice = createApi({
tagTypes: ['region']
})
.providesTags(['region']);
我也try 使用apiSlice.util.resetApiSlice
,但没有触发用白屏替换整个站点的所有内容的重新获取,我必须刷新才能再次加载它.