标题几乎是自我解释的。我找不到有关它的任何信息。 Angular在引擎盖下使用RxJs可观察到的东西在React和MobX中尤其如此吗?
答案 0 :(得分:2)
根据我在MobX源代码中看到的内容,没有很多重叠。他们两个都不互相使用,或者彼此之间有共同的依赖关系。
MobX中Observable的解释似乎是对象,数组,地图等被Proxy对象包装,以跟踪和通知属性更改。这用于通过应用程序传达状态更改,而对原始javascript类型的更改相对较少(这可能是“透明”的含义)。尽管这些类型是可以观察到的(如动词中所示),但它们不是Observables defined by ReactiveX的实现。
另一方面,RxJS提供了一个全新的,有人会说是巨大的API,该API用于修改由抽象Observable类型(不一定代表原始javascript类型)生成的所谓“通知”。不是强制性地直接更改对象,而是使用由可管道运算符组成的“ LINQ-ish”语言来表示执行流。在许多方面,RxJS可以看作是JavaScript的语言扩展,以启用响应式编程as defined in the Observable contract。
但是有一个重叠之处,那就是“ MobX”是一个用于以下用途的库
透明地应用函数式反应式编程
RxJS也提供了反应式编程,但是绝对不透明。
答案 1 :(得分:0)
这是来自官方mobx github wiki page
的一个易于理解的示例让我们假设您有一个带有三个属性的人对象(MobX中的可观察属性或RxJs中的流):
class Person {
constructor(firstname, lastname, nickname) {
this.firstname = firstname
this.lastname = lastname
this.nickname = nickname
}
}
让我们假设您想被动地为该人派生一个“显示名”。你想要这样的东西...
displayname() {
return this.nickname ? this.nickname : this.firstname + ' ' + this.lastname
}
在MobX中,您需要的是:-
const displayname = computed(() => this.nickname ? this.nickname : this.firstname + ' ' + this.lastname)
但是,在RxJS中,您必须执行以下操作:-
const displayStream = person.nickname.combineLatest(this.nickname, this.firstname, this.lastname)
.map([nickname, firstname, lastname] => nickname ? nickname : firstname + " " + lastname)
.distinctUntilChanged
如以上示例所示,这是链接的阅读内容的重点:-
何时在另一个上使用?
“如果时间起着重要的作用,例如在节流,累积事件或具有诸如zip之类的复杂联接模式时,这些都是您要使用流(RxJS)的情况,否则您可以简单地使用MobX。
有关详细说明,请转到MobX Repo