如何判断 Vue 组件是不是因为热重载而被破坏?
Posted
技术标签:
【中文标题】如何判断 Vue 组件是不是因为热重载而被破坏?【英文标题】:How to determine whether Vue component is destroyed due to hot reload?如何判断 Vue 组件是否因为热重载而被破坏? 【发布时间】:2021-02-04 20:24:42 【问题描述】:我有一个 Vue 组件,用于管理设置成本高昂的大量资源(即带有视频流的 WebRTC PeerConnection
)。该组件的设计方式使这些繁重的资源保存在其他地方,并在模块重新加载时保留。当组件重新加载(销毁并再次创建)时,它会检查已保存的流并重新部署它而无需重新创建。
然而,这意味着destroyed
钩子实际上并没有破坏任何东西。当用户离开页面并且组件被完全销毁而不是重新加载时,这不是预期的行为。
所以问题是:如何判断组件是被销毁以重新加载(并且资源应该保持原样)还是因为不再需要它(并且应该关闭资源)?
我使用的是 Nuxt,所以 webpack 配置和其他底层相关的东西都由 Nuxt 自己管理。该区域未对 Nuxt 配置进行任何更改。
【问题讨论】:
我猜销毁应该是默认的,一些环境应该保留状态?所以最好告诉保留而不是猜测不要保留 似乎没有办法区分这两个事件(组件的生命周期挂钩中没有某种“热重载”标志)。我只会在开发模式下使用去抖动器:在destroyed
中使用setTimeout
延迟关闭流(例如,200 毫秒),并在created
中停止该计时器,这应该会在不久后发生热重载。
销毁时需要关闭摄像头吗?
不是相机(它是仅接收流),但是是的,流应该在 destorying 时关闭。
【参考方案1】:
老实说,我仍然不太清楚你的问题。
虽然它可以让你知道这一点。
if (module.hot)
module.hot.addStatusHandler(status =>
if (status === 'idle')
// do code here
)
【讨论】:
以上是关于如何判断 Vue 组件是不是因为热重载而被破坏?的主要内容,如果未能解决你的问题,请参考以下文章
如何判断 pc.onnegotiationneeded 是不是因为流已被删除而被解雇?
Vue.js / webpack:当热重载编译它们时,如何清除旧的包 main-*.js 文件?