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