文档是这样说的:
- 一个 Promise,允许您等待缓存条目从缓存中删除的时间点,方法是在应用程序中长时间不使用/订阅任何条目,或者通过调度 api.utils。重置ApiState。cacheEntryRemoved
我已经目视扫描了文档,但我还没有像我想的那样理解这部分。
上面的引用是否意味着当使用查询的组件卸载时,承诺就得到了实现?
当组件接收流式更新时怎么办?
当不再需要从 WS 服务器接收到的部分消息时,在 onCacheEntryAdded 中实现
cacheEntryRemoved
承诺后立即部分取消订阅现有 WebSockets 连接是一种好的做法吗?或者从 WS 连接的该通道取消订阅 useEffect 钩子的清理函数是否更好?
我有一个 Socket.IO 连接,用于并行接收更多通道的消息,某些组件需要一个通道,其他一些组件需要另一个通道,其他一些组件需要与现有安装的组件相同的通道。履行此承诺后可以取消订阅频道吗?我已在另一个问题中提供了有关此问题的更多信息。
这很字面意思:当缓存条目从缓存中删除时。
对于每个端点参数组合,您都有一个缓存条目。
因此,当第一个组件执行
useChatRoomQuery("flower")
时,会添加一个缓存条目(并且使用参数 onCacheEntryAdded
为 "chatroom"
条目运行 "flower"
函数)。如果另一个组件也使用 useChatRoomQuery("flower")
,则使用相同的缓存条目(不调用 onCacheEntryAdded
)。useChatRoomQuery("afterhour")
,则会创建一个新的缓存条目(并启动另一个 onCacheEntryAdded
)。
一旦使用缓存条目的最后一个组件停止使用它(通过卸载或更改为另一个参数),就会启动计时器(通常为 60 秒 - 您可以通过
keepUnusedDataFor
在 api 和端点级别进行配置)。因此,通常取消订阅套接字连接可能是一个好主意 - 当这是您监听的最后一个主题时,也断开连接。毕竟,一段时间以来没有人对这些数据感兴趣,您可以随时重新连接并添加新的侦听器。