停止从 RTKQ 接收流更新的正确方法是什么?

What is the correct way to stop receiving streaming updates from an RTKQ?

我尝试调用取消订阅功能:

unsubscribeFromThingIds(arg.tids);

this example 中的 await cacheEntryRemoved; 行之后。

函数定义如下:

export const unsubscribeFromThingIds = (tids: string[]) => {
  followedThingIds = followedThingIds.filter(
    id => !tids.includes(id)
  );
  const argument = { tids: followedThingIds } as ITimersChannelInitParams;
  myIo!.emit("configure timers channel", argument);
};

(其中 myIo 是 Socket.IO 客户端)

这目前对我不起作用。我目前正在调试这个问题。

我还尝试使用 useEffect 挂钩,并在组件卸载时为 运行 它返回清理函数,如下所示:

useEffect(() => {
  return () => {
    unsubscribeFromThingIds(getTimersQueryParams.tids);
  };
}, [getTimersQueryParams]);

我想询问此信息,因为我不确定我应该更多地研究这两个想法中的哪一个,或者我是否可以做另一件事更好。

难道你就是心急?缓存条目将在最后一个组件停止使用它后 60 秒(keepUnusedDataFor 选项)被删除。

通常:如果您在 onCacheEntryAdded 内启动侦听器,则使用端点生命周期并等待 cacheEntryRemoved 是执行此操作的正确方法。如果你想让它早点发生,只需使用更短的 keepUnusedDataFor 持续时间。