停止从 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
持续时间。
我尝试调用取消订阅功能:
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
持续时间。