javascript - rxjs Observable 相对于 DOM 事件有什么优点?

标签 javascript jquery rxjs reactive-programming

我一直在研究 rxjs 和响应式编程,但有些东西我还不太明白。 例如,我想获取简单输入上的 keyup 事件的结果,映射它,并将映射结果设置为另一个 div 内容:

const root = $('#root'),
      input = root.find('#some-input'),
      result = root.find('#result');

使用 rxjs,我可以做到:

const keyupObs = fromEvent(input, 'keyup');
const mapper = keyupObs.pipe(
    map(e => $(e.target)),
    tap(t => result.html(t.val()))
).subscribe(t => console.log(t));

使用jquery驱动的事件,我可以写:

input.on('keyup', e => result.html($(e.currentTarget).val()));

代码更少,对于像我这样的初学者来说似乎与我使用 rxjs 编写的代码没有太大区别。 那么使用 rxjs 的主要优点是什么?为什么我应该使用它而不是 DOM 驱动事件(在本例中使用 jQuery)?

最佳答案

采用可观察的定义:

Observables are lazy Push collections of multiple values.

这本身并没有多大意义。在您的情况下,事件机制适合您的需求并模拟流。

如果你想怎么办:

  1. 将值与另一个流合并?
  2. 以复杂的方式映射和修改输出?
  3. 是否有 Promise 不支持的异步流?
  4. 缓存第一个值之后的输出?
  5. 跨组件和服务使用它?

事件可观察对象本身提供的值(value)最少,但如果您想使用并与其他对象结合,可观察对象将提供大量可供使用的运算符。

关于javascript - rxjs Observable 相对于 DOM 事件有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59308927/

相关文章:

javascript - 将音频保存到 localStorage 进行播放

javascript - navigator.geolocation.getCurrentPosition 在 chrome 和 firefox 中总是失败

jquery - 两个 .on 事件处理程序,仅触发 1 个

javascript - 如何在 RxJS(或 Reactive Extensions 中的通用)中实现时间过期热观察

javascript - RxJS 过滤日期

javascript - 如何在数组中添加一个值?

javascript - React-Native 与 Redux 动态数据源

javascript - 从 session 数组中删除项目 Jquery Ajax

javascript - JQuery撤消追加

javascript - 如果发出相同的可观察值,则取消延迟