用途:在 kea logic 中统一管理需要显式清理的资源,如 setInterval、setTimeout、window/document/MediaQueryList 事件监听,以及 WebSocket、EventSource、ResizeObserver、IntersectionObserver 等订阅。仓库内每个 logic 都已通过全局 disposablesPlugin 注入 cache.disposables,清理在卸载时自动执行,标签页隐藏时后台工作自动暂停。
主要能力与用法:调用 cache.disposables.add(setup, key?, options?)。setup 立即执行且必须返回清理函数;key 为字符串,重复添加同一 key 会先清理上一个,并可用于后续 cache.disposables.dispose(key) 提前停止;options 的 pauseOnPageHidden 默认 true,即隐藏时清理、显示时重新 setup。
典型场景:在 afterMount 中注册轮询定时器并返回 clearInterval;悬浮结束时用 dispose('nowInterval') 停止;用 key 实现快速重复触发的替换(如 seekIndicatorTimer);同一 afterMount 注册多个命名 window 监听器;visibilitychange 监听需设 pauseOnPageHidden: false;MediaQueryList 监听在 events(afterMount) 中注册。
限制:不要用 beforeUnmount 清理自己控制的资源,应改用 cache.disposables.add;beforeUnmount 仅保留给非资源型收尾,如状态刷新、persist、第三方 dispose()。默认暂停对多数场景正确,只有隐藏时仍可能触发的事件(storage、online/offline、message、visibilitychange 本身)才需关闭暂停。popstate 由用户触发,隐藏时不会触发,保持默认即可。