Redux&RxJS,有什么相似之处吗?

Osw*_*ldo 100 javascript rxjs redux

我知道Redux是Flux的一个更好的"实现",或者更好地说它是一个简化事物(应用程序状态管理)的重新设计.

我听过很多关于反应式编程(RxJS)的内容,但我还没有去学习它.

所以我的问题是:这两种技术之间是否存在任何交集(任何共同点)或它们是互补的?......还是完全不同?

And*_*ltz 170

简而言之,它们是非常不同的库,但是有一些模糊的相似之处.

Redux是一个在整个应用程序中管理状态的工具.它通常用作UI的体系结构.可以将其视为(一半)Angular的替代品.

RxJS是一个反应式编程库.它通常用作在JavaScript中完成异步任务的工具.把它想象成Promise的替代品.


反应式编程是一种范式(工作和思考方式),从远处观察数据变化.数据不会从远处更改.

这是一个从远处改变的例子:

// In the controller.js file
model.set('name', 'George');
Run Code Online (Sandbox Code Playgroud)

模型被改变从控制器.

这是从远处观察的一个例子:

// logger.js
store.subscribe(function (data) {
    console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

在Logger中,我们观察Store(从远处)发生的数据更改,并写入控制台.


Redux稍微使用了Reactive范例:Store是被动的.您没有从远处设置其内容.这就是store.set()Redux中没有的原因.商店从远处观察行动,并自行改变.商店允许其他人从远处观察其数据.

RxJS也使用Reactive范例,但它不是一个体系结构,它为您提供了基本的构建块Observable,以实现这种"远距离观察"模式.

总而言之,为不同的目的,非常不同的东西,但分享一些想法.

  • 根据[官方减少文档](http://redux.js.org/docs/introduction/PriorArt.html),"他们一起工作很好." (15认同)
  • 他们一起工作得很好!有一个Redux中间件,让您有机会使用RxJS和Observables进行Redux操作.https://github.com/redux-observable/redux-observable此外,我写了一篇关于如何的博客文章:http://www.robinwieruch.de/redux-observable-rxjs/ (9认同)
  • 不,你不应该一起使用它们.人们使用Rx模拟Redux.一个快速的谷歌将为您找到示例.如果您想将Rx用于您的反应式UI,请查看Cycle.js,Andre的框架.我最近一直在使用它,这太棒了.API最近发生了很大的变化,但我相信他终于开始冻结它的一部分了. (3认同)
  • 所以他们不应该一起使用,对吗? (2认同)
  • 它们可以很好地协同工作,但在实践中,Reactive 可以为您做 Redux 会做的事情 - 将组件的状态同步到模型,因此通常同时使用两者没有多大意义 (2认同)

cmd*_*mdv 32

它们是非常不同的东西.

RxJS可用于执行反应式编程,是一个包含250多个运算符的非常全面的库.

Redux就像github repo中描述的那样"Redux是JavaScript应用程序的可预测状态容器".

Redux只是一个处理应用程序状态的工具.但相比之下,你可以在RxJS中构建一个完整的应用程序.

希望这可以帮助 :)

  • 你的答案也很好@cmdv.当我写我的时候,我没有看到它. (3认同)
  • 欢呼,虽然不是那么深刻:) @AndréStaltz (3认同)

mdi*_*ici 10

Redux只是一个状态管理库,带有明确定义的更新操作标准。只要您坚持标准,您就可以保持数据流的健全和易于推理。它还带来了通过中间件和存储增强器增强数据流的能力。

RxJS是反应式编程的工具包。实际上,您可以将应用程序中发生的每一件事都视为流。RxJS 提供了一个非常丰富的工具集来管理这些流。

RxJS 和 Redux 拦截在哪里?在 redux 中,你用动作更新你的状态,显然这些动作可以被视为流。使用像 redux-observable 这样的中间件(您不必这样做),您可以以反应方式实现所谓的“业务逻辑”。另一件事是您可以从您的 redux 存储创建一个可观察的对象,这有时可能比使用增强器更容易。