1、什么是RxJS
RxJS(响应式扩展的 JavaScript 库)是一个使用可观察对象进行响应式编程的库。
RxJS是一个js库,它的目的是帮助我们进行响应式编程,那么如何进行响应式编程,使用可观察对象。
当你在js中引入RxJS库,就可以在js中进行使用可观察对象进行响应式编程。
2、什么是响应式编程
响应式编程是一种通过异步数据流(可观察对象)来构建事务(功能,函数)关系的编程模型(范式)。
响应式编程的目的是为了构建事务之间的关系。
为什么要构建事务之间的关系?
复杂的业务逻辑拆分成一个个小功能后,功能与功能之间存在一定关系。这是业务需求决定的。
举例:登录之后,需要先获取token,再通过应用初始化方法获得应用信息,用户信息,全局配置等,再通知需要这些信息的组件信息已初始化(变化),让他们进行响应式变化(更新),最后导航到首页。
如何构建事务之间的关系?
通过异步数据流(可观察对象)
在面向对象编程语言中,响应式编程通常以观察者模式的扩展呈现。
3、观察者模式
观察者模式是一种设计模式。
它有一个主体(subject)对象,负责维护依赖项(observer)列表,当状态变化时通知他们。
它和发布/订阅模式很像,但不完全一样。
4、观察者模式中设计的概念
使用可观察对象来传递值
观察者定义了收到值的处理器
订阅者函数用来获取或生成那些要发布的值或消息
订阅对象
5、观察者模式中的动作
订阅:当观察者订阅可观察对象时,执行订阅者函数(订阅者函数会发布(通过http请求获得或某些条件生成)值,可观察对象会传递值,观察者会消费(使用)值)
解除订阅:解除观察者与可观察对象之间的关系,可观察对象中的订阅者函数不再执行。
6、工作模型
流水线工作模型(太懒了,不想画图,描述一下吧)
货物(数据)放到流水线(可观察对象)上,流水线上的工人(操作符)操作货物,消费者(观察者)使用流水线下来的货物。
7、其他概念
操作符是基于可观察对象构建的对集合进行操作的函数
pipe函数负责链接操作符
subject是一个特殊的可观察对象,它将值广播给订阅了它的观察者。subject既是一个可观察对象,又是一个观察者。
8、命名规范
可观察对象以“$”符号结尾
可观察对象传递的最近一个值,与可观察对象同名,但不带“$”后缀。
9、项目实践
实时更新项目配置(举例:在a页面关闭某种支付方式后,在其他页面不再显示该支付方式),实时组件通信(页面编辑器)等
解决方案:使用EventEmitter或Subject(EventEmitter是Subject的派生类)
登录之后,需要先获取token,然后在全局服务中通过应用初始化方法取到应用信息,用户信息和全局配置之后,然后发布相关类型的消息,需要使用信息的组件接收到消息之后,先进行消息过滤(只过滤自己需要的消息),然后从消息中获得需要的数据,并更新组件的模型。在某一页面修改全局配置后,通过请求告知后端存储该配置,然后发布消息通知其他组件该信息已修改,订阅了该消息的组件会自动获取最新的配置并修改。