我正在尝试使用rxjs observable从angular-mobx store获取更改。但是,如果观察到的数组发生变化,则不会从那里获得任何更改。但是如果我使用'=‘符号分配新值,那么我在订阅中得到了更改。有谁能解释一下吗?或者仅通过像拼接或替换数组中的对象这样的更改来帮助获得更改?谢谢
https://stackblitz.com/edit/angular-reuych演示应用
import { computed, action, observable } from "mobx-angular";
import {observe } from "mobx";
import { Observable } from 'rxjs';
import { Injectable } from "@angular/core";
import * as moment from "moment-timezone";
@Injectable()
export class Store {toRx(obj, prop) {
return Observable.create(observer =>
observe(obj, prop, (change) => observer.next(change.newValue), true)
);
}
@observable storeCampaigns:any=[];
}然后在一个像这样订阅的组件中
this.store.toRx(this.store.storeCampaigns, 'campaigns')
.subscribe(val => {
console.log("calendar get change", val)发布于 2020-02-04 01:09:50
如果你深入研究mobx,你会发现下面的链接observer,你可以在这里找到下面的评论
/**
* A node in the state dependency root that observes other nodes, and can be observed itself.
*
* ComputedValue will remember the result of the computation for the duration of the batch, or
* while being observed.
*
* During this time it will recompute only when one of its direct dependencies changed,
* but only when it is being accessed with `ComputedValue.get()`.
*
* Implementation description:
* 1. First time it's being accessed it will compute and remember result
* give back remembered result until 2. happens
* 2. First time any deep dependency change, propagate POSSIBLY_STALE to all observers, wait for 3.
* 3. When it's being accessed, recompute if any shallow dependency changed.
* if result changed: propagate STALE to all observers, that were POSSIBLY_STALE from the last step.
* go to step 2. either way
*
* If at any point it's outside batch and it isn't observed: reset everything and go to 1.
*/这几乎表明将计算新的值(即.只有当第一次访问(即,当您订阅时)或存在依赖关系更改时(即,当您更改存储的refs时,在您的情况下,使用存储中的=运算符),新的事物才会通过订阅出现)。
因此,如果我必须做一个工作方式的摘要,它的行为与其他状态管理库非常相似,只有当存储中的一些引用发生更改时,它们才会将新值推送到其订阅者。
**免责声明,不是mobx pro,但这是源代码所说的。
https://stackoverflow.com/questions/59970719
复制相似问题