最近,在javascript中,推动了反应式编程,并使所有内容成为您可以订阅的流。
但是,订阅流和通过动作侦听器订阅事件有什么区别?
这两种方法都不是“反应性的”,因为他们都订阅了点击吗?
答案 0 :(得分:0)
两者都可以被认为是事件处理器,但区别/优势有多种形式。
第一个区别是事件监听器与流的形式。事件侦听器一次只处理一个事件。反应流是monad,这意味着您可以在事件上映射函数,使用转换后的信息发出新流,合并流,组合流等。
其次,引用this excellent answer,流可以让你根据事件声明变量,将所有状态逻辑保存在同一个地方。
counter := 0 -- initial value
// ...
// Do other variable declarations, and bunch of other stuff.
// ...
on buttonUp = (counter := counter + 1) -- change it later
on buttonDown = (counter := counter - 1)
如果没有流,你会保持逻辑规定计数器的值与计数器的声明分开。
与此相比,你需要了解的关于计数器的所有内容都在一个地方:
counter :: Behavior Int
counter = accumulate ($) 0
(fmap (+1) buttonUp
`union` fmap (subtract 1) buttonDown)
用简单的英语说:
计数器最初等于0。它的值将等于两个合并流的累积结果。一个在按下向上按钮时返回+1,另一个在按下向下按钮时返回-1。