小编Kev*_*oin的帖子

BehaviorSubject 向所有订阅者发送相同的状态引用

在我们的单页应用程序中,我们开发了一个集中式存储类,它使用 RxJS 行为主体来处理应用程序的状态及其所有变化。我们应用程序中的几个组件正在订阅我们商店的行为主题,以便接收对当前应用程序状态的任何更新。然后将此状态绑定到 UI,以便每当状态更改时,UI 都会反映这些更改。每当组件想要更改状态的一部分时,我们都会调用由我们的 store 公开的函数,该函数执行所需的工作并更新对行为主体调用 next 的状态。到目前为止没有什么特别的。(我们使用 Aurelia 作为执行 2 路绑定的框架)

我们面临的问题是,一旦组件更改它从商店接收到的本地状态变量,即使没有在 subejct 本身上调用 next(),其他组件也会更新。

我们还尝试订阅主题的 observable 版本,因为 observable 应该向所有订阅者发送不同的数据副本,但看起来情况并非如此。

看起来所有主题订阅者都在接收存储在行为主题中的对象的引用。

import { BehaviorSubject, of } from 'rxjs'; 

const initialState = {
  data: {
    id: 1, 
    description: 'initial'
  }
}

const subject = new BehaviorSubject(initialState);
const observable = subject.asObservable();
let stateFromSubject; //Result after subscription to subject
let stateFromObservable; //Result after subscription to observable

subject.subscribe((val) => {
  console.log(`**Received ${val.data.id} from subject`);
  stateFromSubject = val;
});

observable.subscribe((val) => {
  console.log(`**Received …
Run Code Online (Sandbox Code Playgroud)

rxjs aurelia rxjs6

4
推荐指数
1
解决办法
4041
查看次数

标签 统计

aurelia ×1

rxjs ×1

rxjs6 ×1