信号与#34;之间的区别(js-signals)和" Observables" (mobx,mobx-react)?

时间:2018-05-14 09:28:55

标签: user-interface signals editor mobx mobx-react

他们可以一起完成状态管理和双向数据绑定吗?

Mobx在javascript中实现了可观察的模式。通过使用mobx和mobx-react,人们可以在反应中引用mobx observables并为它们分配autorun,reaction和comptued例程。每次observable改变其引用关系时,自动运行,反应和计算例程都会被触发。

当你开发一个内容丰富的应用程序时,这非常有用,比如编辑。

虽然js信号的工作方式不同,但信号可以注册回调及其优先级。当组件发生变化时,程序员可以选择调度信号以触发所有相关的回调(就像事件一样)

哪种模式更好,它们能否顺利合作?

背景

我正在研究一种强烈使用信号的编辑器。我也更喜欢使用可观察的模式来管理编辑器的状态。我的个人感受,当观察者成长时(就像200个全局变量),它变得难以维持。

我很感激你的想法。成功使用这些技术的开发人员受到欢迎。

1 个答案:

答案 0 :(得分:0)

js-signals只是一个事件发射器库,而mobx只是一个状态/观察者库。

您可以简单地触发和处理事件。只要处理程序在mobx.action中包含mobx State的更改。正确处理状态更改并正确更新反应组件/正确触发观察器事件:

class Store {
  @mobx.observable name = "test"
}
var store = new Store();
//custom object that dispatch a `started` signal
var myObject = {
  started : new signals.Signal()
};
function onStarted(name){
  mobx.runInAction(() => {
    store.name = name;
  });
}
myObject.started.add(onStarted); //add listener

mobx.observe(store,"name",change=> {
  myObject.started.dispatch(change.name+'x'); //woops now we have an infinite loop!
});
myObject.started.dispatch('foo'); //dispatch signal passing custom parameters
// myObject.started.remove(onStarted); //remove a single listener