在页面热模块替换期间创建新的 RxJS 订阅

Posted

技术标签:

【中文标题】在页面热模块替换期间创建新的 RxJS 订阅【英文标题】:New RxJS subscription gets created during page hot module replacement 【发布时间】:2019-09-29 07:45:09 【问题描述】:

我正在将一个新的主题从一个内部 NPM 包导入到我的 Next.js 应用程序中。

内部 NPM 包

import  Subject  from 'rxjs';

export const errorSubject = new Subject<>();

Next.js 应用程序

import  errorSubject  from '@my-package'

// Inside component's render
render() 
  errorSubject.subscribe(
    next: v => console.log(v),
  );

每次 Next.js 热重新加载时,都会创建一个新订阅。如果我重新加载页面,则只剩下 1 个订阅。

这会导致问题,因为运行了多个回调。


https://www.youtube.com/watch?v=cqy3RPQocRw

【问题讨论】:

【参考方案1】:

保存对订阅的引用,以便每次卸载组件时都可以删除它。

private _subscription;


render() 
  this._subscription = errorSubject.subscribe(
    next: v => console.log(v),
  );


componentWillUnmount() 
  this._subscription.unsubscribe();

【讨论】:

是的,这行得通!非常感谢。我之前尝试过 componentWillUnmount(),但没有跟踪我班级的私人订阅

以上是关于在页面热模块替换期间创建新的 RxJS 订阅的主要内容,如果未能解决你的问题,请参考以下文章

webpack学习之—— 模块热替换(Hot Module Replacement)

RXJS Observable的冷,热和Subject

webpack 热更新

webpack-Hot Module Replacement(热更新)

Webpack & The Hot Module Replacement热模块替换原理解析

Webpack如何实现热更新?