我正试图创建一个清晰的反应性图片及其意义,与javascript中的事件相比。
来自维基百科:
// In computing, reactive programming is a programming paradigm orientated
// around data flows and the propagation of change.
我努力区分事件驱动的UI的javascript中的实际实现可能与“反应式实现”不同,并且会感谢任何能够对比这些模式的人。
我一直在使用流星一段时间,所以要理解它的背景,但不是它的基本机制。
我认为基本上它归结为某种事件或通知是从“反应数据源”发布或受制于另一个功能,即观察它,每个都被设计为对这些事件做出“反应”。
非常具体地说,实现与Publishingg和订阅事件有何不同,该对象定义了该对象或它作为被动对象存在的系统?
任何帮助都会很棒。
答案 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);
或对recentPosts
或newsfeedUpdates
或friendMessages
执行相同操作?
这就是所有这一切的想法,使用流,它们实际上是数组,其值按时间分隔。
每个库都有不同的,不同的包装器,相同方法的不同名称,不同的行为......但目标都是相似的。
你所看到的是,事件的回调方面不足以达到这种链式组合的水平。
其他一些语言本身就具有对此类功能的本机(或语法覆盖)支持。 Javascript,当然不是那么多。 我们需要依赖包装来解决这种问题,而不是依赖语法。
答案 1 :(得分:1)
反应系统通常表示反应性流。
使用pub / sub,A向B发送消息,B可能会或可能不会对消息执行某些操作。
对于反应流,A向B发送消息,B向A提供背压,因此A知道何时收到消息,并且该流已被清空。在组合流,双工流等方面也有明确定义的语义。为了比较,使用pub / sub,没有这样的语义,并且这些操作的实现通常是不明确的和临时的。通过定义明确的操作,组合和互操作流变得容易。
除了理论定义之外,不同的图书馆以不同的方式做事。
对于高级概述,我强烈推荐https://github.com/kriskowal/gtor。