离开页面后还在请求怎么办
先理解原理和示例,再练习完整口述与追问。
回答要点
卸载不等于失活;清理全部资源。
原理拆解
离开页面并不自动终止所有外部工作。全局监听、定时器、WebSocket、Worker 和异步请求都有自己的生命周期,需要在组件卸载或缓存失活时按业务释放。异步结果还要检查当前页面或请求版本,避免已离开的实例继续写入共享状态。
示例与推演
建立资源时同时确定清理点:addEventListener 配 removeEventListener,setInterval 配 clearInterval,订阅配 unsubscribe,请求配 AbortController 或过期标记。Vue2 用 beforeDestroy,Vue3 用 onUnmounted,React 用 Effect cleanup;KeepAlive 的失活需要额外暂停逻辑。
易错点
不要先建立永久资源再临时猜一个钩子。取消客户端请求不等于回滚服务器;SSR 不应创建需要客户端卸载钩子才能释放的长期任务。
参考回答可直接练习口述
Vue2 在 beforeDestroy 等清理 timer、监听和请求,keep-alive 还需在 deactivated 根据业务暂停;Vue3 用 onUnmounted、watcher cleanup 等,异步创建的订阅单独管理。React 在 Effect cleanup 中撤销对应 setup,事件启动的任务也要有归属。取消不能保证后端任务停止,因此同时失效回调,避免写回已离开的页面。