首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rxjs Observable订阅mobx @observable,但不在深层组件(ts文件)中进行更改

使用rxjs Observable订阅mobx @observable,但不在深层组件(ts文件)中进行更改
EN

Stack Overflow用户
提问于 2020-01-29 23:47:09
回答 1查看 646关注 0票数 0

我正在尝试使用rxjs observable从angular-mobx store获取更改。但是,如果观察到的数组发生变化,则不会从那里获得任何更改。但是如果我使用'=‘符号分配新值,那么我在订阅中得到了更改。有谁能解释一下吗?或者仅通过像拼接或替换数组中的对象这样的更改来帮助获得更改?谢谢

https://stackblitz.com/edit/angular-reuych演示应用

代码语言:javascript
复制
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=[];

}

然后在一个像这样订阅的组件中

代码语言:javascript
复制
this.store.toRx(this.store.storeCampaigns, 'campaigns')
  .subscribe(val =>  {
  console.log("calendar get change", val)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-04 01:09:50

如果你深入研究mobx,你会发现下面的链接observer,你可以在这里找到下面的评论

代码语言:javascript
复制
/**
 * 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,但这是源代码所说的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59970719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档