1 2 3 |
|
异步数据
RxJS
的一大优势就在于能够统一同步和异步,使用observable
处理数据你不需要关注同步还是异步。
下面的例子我们使用操作符from
将promise
转换为observable
。
指定observable
作为状态的初始值(首次推送数据)
1 2 3 4 5 6 7 8 9 |
|
producer
推送observable
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
执行getAsyncData
之后,from(getAsyncData())
的推送数据将成为状态的最新值。
衍生状态
由于状态todos$
是一个observable
,所以可以很自然地使用RxJS
操作符转换得到另一个新的observable
。并且这个observable
的推送来自todos$
;也就是说只要todos$
推送新数据,它也会推送;效果类似于Vue
的计算属性。
1 2 3 4 5 6 7 8 9 10 |
|
React视图渲染
我们可能会在组件的生命周期内订阅observable
得到数据渲染视图。
1 2 3 4 5 6 7 8 9 |
|
我们可以再优化下,利用高阶组件封装一个装饰器函数@subscription
,顾名思义,就是为React组件订阅observable
以响应推送数据的变化;它会将observable
推送的数据转换为React组件的props
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
总结
使用RxJS
越久,越令人受益匪浅。
- 因为它基于
observable
序列提供了较高层次的抽象,并且是观察者模式,可以尽可能地减少各组件各模块之间的耦合度,大大减轻了定位BUG和重构的负担。 - 因为是基于
observable
序列来编写代码的,所以遇到复杂的业务场景,总能按照一定的顺序使用observable
描述出来,代码的可读性很强。并且当需求变动时,我可能只需要调整下observable
的顺序,或者加个操作符就行了。再也不必因为一个复杂的业务流程改动了,需要去改好几个地方的代码(而且还容易改出BUG,笑~)。
所以,以上基于RxJS
的状态管理方案,对我们来说是一个必需品,因为我们项目中大量使用了RxJS
,如果状态数据也是observable
,对我们抽象可复用可扩展的业务模型是一个非常大的助力。当然了,如果你的项目中没有使用RxJS
,也许Redux
和Mobx
是更合适的选择。
这套基于RxJS
的状态管理方案,我们已经用于开发公司的商用项目,反馈还不错。所以我们决定把这套方案整理成一个js lib
,取名为:Floway
,并在github
上开源:
- github源码:https://github.com/shayeLee/floway
- 使用文档:https://shayelee.github.io/floway
【相关推荐:react视频教程】
以上就是使用RxJS管理React应用状态的介绍的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
更多相关阅读请进入《mobx》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者