Reactjs 在RxJS主题的上下文中,next(';r';)的目的是什么

Reactjs 在RxJS主题的上下文中,next(';r';)的目的是什么,reactjs,rxjs,Reactjs,Rxjs,我对RxJS世界还是相当陌生(请原谅我的语义),但我看到了一些代码示例,这些代码创建一个主题来做一些工作,然后调用订阅上的next(0)或next('r')。它似乎要重新运行流,或者从流中获取下一个值 然而,当我尝试使用它来调用一些数据的API时,它完全跳过了它在流中定义的应该做的工作(假设它将再次“运行”流并从服务器获取新数据),而我的订阅者在我尝试这样调用下一个时会返回“r”或零值 我知道订阅“开始执行流”,可以这么说,但是如果我想“重新运行”它,我必须取消订阅,并且每次都重新订阅 用一个看

我对RxJS世界还是相当陌生(请原谅我的语义),但我看到了一些代码示例,这些代码创建一个主题来做一些工作,然后调用订阅上的next(0)或next('r')。它似乎要重新运行流,或者从流中获取下一个值

然而,当我尝试使用它来调用一些数据的API时,它完全跳过了它在流中定义的应该做的工作(假设它将再次“运行”流并从服务器获取新数据),而我的订阅者在我尝试这样调用下一个时会返回“r”或零值

我知道订阅“开始执行流”,可以这么说,但是如果我想“重新运行”它,我必须取消订阅,并且每次都重新订阅


用一个看似多余的值调用next是一种惯例吗?我只是用错了它,或者像这样调用next有一个很好的用例吗?我确信我遗漏了一些基本的东西,或者我对它的工作原理的理解是非常错误的。

这是一个好问题,我绝对建议你阅读有关热观测和冷观测的内容

  • 每次有人
    订阅它时,都会执行冷观测
  • 热观测不关心订阅的执行情况:
在您的示例中,您使用的是表示冷可见的
主题。
您可以尝试使用
BehaviorSubject
ReplaySubject
——两者都很热门,但要注意它们的行为不同

在您的示例中,您可以修改
主题
,如下所示:

const mySubject = new Subject();

const myStream$ = mySubject.pipe(
  shareReplay(1)
);

myStream$.subscribe(x => console.log(x))

mySubject.next(1);
mySubject.next(2);
mySubject.next(3);

const a$ = of(5).pipe(
  tap(console.log),
  shareReplay(1)
);

a$.subscribe(); // the 'tap' will be executed here
a$.subscribe(); // but not here! console.logs only once
const mySubject = new Subject();

const myStream$ = mySubject.pipe(
  shareReplay(1)
);

myStream$.subscribe(x => console.log(x))

mySubject.next(1);
mySubject.next(2);
mySubject.next(3);