RTK 查询 - 在 cacheEntryAdded 时删除缓存数据
RTK Query - Delete cached data upon cacheEntryAdded
目前我们有一个 api 端点,它通过 ID 请求一个 'Group'。
我们设置了 WebSocket 订阅,在 onCacheEntryAdded 定义中,我们处理更新或删除该组的情况。
当我们收到来自 websocket 的更新消息时,我们触发以下事件;
updateCachedData((draft) => {
draft = response;
}
这会按预期更新条目。
但是,如果我们想完全删除该条目,我们应该使用什么方法呢?根据来自 websocket 的 'delete' 消息,我假设我可以简单地将草稿设置为未定义,但情况似乎并非如此。
updateCachedData((draft) => {
draft = response;
}
实际上一开始并没有在这里更新任何东西。
updateQueryResults
与 immer
中的 produce
或普通 createSlice
大小写缩减器具有相同的规则:您可以修改 state
中的对象(或 draft
在这种情况下),但您不能重新分配变量本身。如果你想这样做,你必须
updateCachedData((draft) => {
return response;
}
相反。
以同样的方式,您可以
updateCachedData((draft) => {
return null;
}
也是,但这不会删除完整的缓存条目,它只会将 data
设置为 null
。 (undefined
不行!)
缓存条目只有在没有更多组件使用它时才会被删除(不与 useQuery
一起使用)- 然后它将在 60 秒后自动删除。
目前我们有一个 api 端点,它通过 ID 请求一个 'Group'。
我们设置了 WebSocket 订阅,在 onCacheEntryAdded 定义中,我们处理更新或删除该组的情况。
当我们收到来自 websocket 的更新消息时,我们触发以下事件;
updateCachedData((draft) => {
draft = response;
}
这会按预期更新条目。
但是,如果我们想完全删除该条目,我们应该使用什么方法呢?根据来自 websocket 的 'delete' 消息,我假设我可以简单地将草稿设置为未定义,但情况似乎并非如此。
updateCachedData((draft) => {
draft = response;
}
实际上一开始并没有在这里更新任何东西。
updateQueryResults
与 immer
中的 produce
或普通 createSlice
大小写缩减器具有相同的规则:您可以修改 state
中的对象(或 draft
在这种情况下),但您不能重新分配变量本身。如果你想这样做,你必须
updateCachedData((draft) => {
return response;
}
相反。
以同样的方式,您可以
updateCachedData((draft) => {
return null;
}
也是,但这不会删除完整的缓存条目,它只会将 data
设置为 null
。 (undefined
不行!)
缓存条目只有在没有更多组件使用它时才会被删除(不与 useQuery
一起使用)- 然后它将在 60 秒后自动删除。