chimywang 2019-06-25
或许"响应式布局"这个名单大家都听过或者都自己实现过,那么"响应式编程"是什么呢?下面我们来具体聊一聊。
从字面意思上我们可以大致理解为:所有的事件存在于一条事件总线上,所有的事件都可以看作未来某个时间将要发生的事件流(stream),当事件总线上的事件执行完后会主动去通知"观察他们的对象",比如我们经常用到的settimeout、异步等都属于该范畴。
在某种程度上,这并不是什么新东西。事件总线(Event buses)或咱们常见的单击事件就是一个异步事件流,你可以观察这个流,也可以基于这个流做一些自定义操作(原文:side effects,副作用,本文皆翻译为自定义操作)。响应式就是基于这种想法。你能够创建所有事物的数据流,而不仅仅只是单击和悬停事件数据流。 流廉价且无处不在,任何事物都可以当作一个流:变量、用户输入、属性、缓存、数据结构等等。比如,假设你的微博评论就是一个跟单击事件一样的数据流,你能够监听这个流,并做出响应。
"响应式编程"采用了“订阅/观察者”设计模式,使订阅者可以将通知主动发送给各订阅者。
RxJS 是一个库,它通过使用 observable 序列来编写异步和基于事件的程序。它提供了一个核心类型 Observable,附属类型 (Observer、 Schedulers、 Subjects) 和受 [Array#extras] 启发的操作符 (map、filter、reduce、every, 等等),这些数组操作符可以把异步事件作为集合来处理。
以下几个概念是RxJs中比较重要的:
注册事件监听器的常规写法。
var button = document.querySelector('button'); button.addEventListener('click', () => console.log('Clicked!'));
使用 RxJS 的话,创建一个 observable 来代替。
var button = document.querySelector('button'); Rx.Observable.fromEvent(button, 'click') .subscribe(() => console.log('Clicked!'));
未完待续...