Javascript中的Reactivityy vs事件?

时间:2016-03-13 22:02:16

标签: javascript reactive-programming

我正试图创建一个清晰的反应性图片及其意义,与javascript中的事件相比。

来自维基百科:

// In computing, reactive programming is a programming paradigm orientated     
// around data flows and the propagation of change.

我努力区分事件驱动的UI的javascript中的实际实现可能与“反应式实现”不同,并且会感谢任何能够对比这些模式的人。

我一直在使用流星一段时间,所以要理解它的背景,但不是它的基本机制。

我认为基本上它归结为某种事件或通知是从“反应数据源”发布或受制于另一个功能,即观察它,每个都被设计为对这些事件做出“反应”。

非常具体地说,实现与Publishingg和订阅事件有何不同,该对象定义了该对象或它作为被动对象存在的系统?

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

关键是随着时间的推移,它都是关于序列的,并且能够传递该代表性对象并使用它,同时它不仅提供传递订阅的方法,还提供操作,转换和整理的方法。 / p>

如果你要考虑一个数组[1, 2, 3],以及你可以用它做些什么,而不是诉诸内部的低层管理......

arr.map(add1).map(triple).filter(evens).reduce(add, 0);
// with a starting value of 0, add all numbers in arr,
// after they've had 1 added, been tripled,
// and had odd products stripped out

如果你能说:

div.mouseMoves
   .map(event => ({ x: event.x, y: event.y }))
   .filter(bottomHalfOfBox)
   .forEach(updateView);

或对recentPostsnewsfeedUpdatesfriendMessages执行相同操作?

这就是所有这一切的想法,使用流,它们实际上是数组,其值按时间分隔。

每个库都有不同的,不同的包装器,相同方法的不同名称,不同的行为......但目标都是相似的。

你所看到的是,事件的回调方面不足以达到这种链式组合的水平。

其他一些语言本身就具有对此类功能的本机(或语法覆盖)支持。 Javascript,当然不是那么多。 我们需要依赖包装来解决这种问题,而不是依赖语法。

答案 1 :(得分:1)

反应系统​​通常表示反应性

使用pub / sub,A向B发送消息,B可能会或可能不会对消息执行某些操作。

对于反应流,A向B发送消息,B向A提供背压,因此A知道何时收到消息,并且该流已被清空。在组合流,双工流等方面也有明确定义的语义。为了比较,使用pub / sub,没有这样的语义,并且这些操作的实现通常是不明确的和临时的。通过定义明确的操作,组合和互操作流变得容易。

除了理论定义之外,不同的图书馆以不同的方式做事。

对于高级概述,我强烈推荐https://github.com/kriskowal/gtor