问题标签 [reactive-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
22572 浏览

programming-languages - 反应式和功能反应式编程之间的区别

我最近一直在对反应式编程进行一些研究,我发现很难找到对反应式和功能反应式之间区别的良好描述。

仅仅是使用函数方法/范式而不是使用声明式或 OO 范式来实现反应式编程吗?

0 投票
2 回答
276 浏览

system.reactive - 将主题传递给组件是否可以

我想知道从架构的角度来看是否可以将主题传递给组件。我真正想要的是让组件公开一个可观察的。但是,我想控制这个可观察流的来源,这就是为什么我问是否可以传入组件可以引发“事件”的主题。

好的,让我们详细说明一下。

比如说,我们正在设计一个组件,它接受用户输入、限制击键并显示结果列表。实际搜索发生在另一个服务组件上。

我想设计这样的 SearchWidget 创建函数:

更高级别的组件(例如控制器/调解器)实际上将连接流。

显然,resultStream 需要 inputStream 来完成工作。

在我们上面的示例中,从 SearchWidget 的角度来看,resultStream 将是一个简单的可观察对象,它可以在其上侦听结果列表。但是,它将在更高级别的组件中作为 Subject 实现。

相比之下,从 SearchWidget 的角度来看,userInputStream 将是一个主题,但它将在更高的组件级别上实例化,因为我们需要提前获得它来连接 resultStream。虽然,从更高级别组件的角度来看,它是一个简单的 observable。

高阶代码可能如下所示:

在上面的实现中,我在 SearchWidget 初始化之前使用了 userInputStream 。当然我也可以这样实现:

因此,从封装的角度来看,第二种实现可能看起来更健壮。但是,传递主题提供了更丰富的灵活性。

由于使用事件流的概念非常现代,因此在设计使用事件流的应用程序时,我正在努力寻找更大范围的最佳实践。

0 投票
1 回答
172 浏览

system.reactive - 区分可能的流,寻找干净的解决方案

我正在尝试在某些 GUI 场景中使用 RxJS。我遇到了一个有趣的案例。我有一个可以查看、编辑和创建实体的小部件。

当您单击“AddNewEntity”按钮时。编辑小部件创建一个空实体,加载它并更改为编辑模式。但是,如果您已经处于编辑模式,它会询问您是否想先恢复更改,一旦您单击“是”,就会发生与前面所述相同的情况。

所以我认为 Rx 可能会帮助我。这是代码。

基本上我正在合并两个流。按钮的一个点击流,该按钮由状态为“NotInEditMode”的小部件的状态过滤。另一个被过滤到相反状态的按钮的点击流被投射到对话框的返回值流中。请注意,对话框的返回值是 bool 的 AsyncSubject,它表示给定的答案。

现在是棘手的部分!它不能这样工作!为什么?因为当状态为“NotInEditMode”时,第一个流匹配,它将小部件设置为编辑模式,现在第二个流(由于合并内部的顺序而随后运行)也将匹配,这基本上导致完全不一致的状态(解锁编辑模式加上打开对话框)。

我找到了两种解决方法。第一个,更改合并中的顺序,使其看起来像这样:

但是,我不喜欢这个解决方案。这对读者来说并不明显。

幸运的是,我找到了另一个解决方案:

背后的想法是只有一条路可以走,所以第一个匹配场景应该中止所有其他场景。

但是,我想知道是否有更清洁的解决方案,或者我是否正在尝试将 Rx 用于它不是为它设计的东西;-)

0 投票
2 回答
6119 浏览

system.reactive - 使用 Rx 处理可观察序列中的错误

如果发生错误,有没有办法让一个可观察的序列恢复执行序列中的下一个元素?从这篇文章看来,您需要在 Catch() 中指定一个新的可观察序列来恢复执行,但是如果您只需要继续处理序列中的下一个元素怎么办?有没有办法做到这一点?

更新:场景如下:我有一堆需要处理的元素。该处理由一系列步骤组成。我已将步骤分解为我想编写的任务。我按照此处发布的 ToObservable() 指南 将任务转换为可观察对象以进行组合。所以基本上我正在做这样的事情 -

或者我可以这样:

即使假设其中一个元素的处理引发异常,这里继续处理其他元素的最佳方式是什么。我希望能够记录错误并继续前进。

0 投票
1 回答
1682 浏览

c# - 鼠标左键单击在 Winform 上使用 Reactive 扩展 IObservable 事件检测

刚开始阅读 Reactive 扩展。我正在尝试观看一个简单的鼠标左键单击我的 winform。意思是任何有点击的地方(在表单上的任何控件上,包括表单)我只想显示一条消息“检测到点击”。到目前为止我有

我知道第一行会检测到任何鼠标事件。我只想单击鼠标左键。请发布工作代码,以便我更好地理解这一点。现在正处于我以前从未使用过的流行语的混乱中,比如 .takeuntil 等。进一步完善我的问题。什么是 Rx 等价物

那应该观察每个可观察到的鼠标或键盘事件。谢谢你

0 投票
4 回答
1231 浏览

haskell - 反应香蕉中的行为

请原谅我,我刚刚开始研究反应性香蕉和 FRP。

reactive-banana 的作者根据我的建议做了这个例子,他创建了一个可以增加和减少的计数器。他使用 accumE 函数来累积事件。我想我能够对 Event 类型有所了解,并且能够用它测试很多东西,但后来我记得还有 Behavior。我进行了调查,但似乎该行为旨在用于类似情况;修改现有变量,就像 accumE 处理事件一样。

行为是什么意思,它的用例是什么?

0 投票
2 回答
312 浏览

haskell - 使用 reactive-banana-wx 的 UI 输入

使用 reactive-banana 时如何获取 ui 元素的内容?event0 返回一个类型为 的事件Event (),它具有单元类型而不是控件的类型。event1 接受 type 的事件Event w (a -> IO ()),但 command 的 type Event w (IO ())。mapAccumE 和 mapAccumB 将纯函数作为参数,因此get text foo不能与它们一起使用。

0 投票
3 回答
2166 浏览

c# - 使用列表和反应式扩展

我已经开始研究反应式扩展,我想知道如何做以下事情(我尽量保持简单):

  1. 有一个字符串列表(或任何其他类型)

  2. 当一个项目被添加到上述列表中时,对它做一些事情。

0 投票
2 回答
616 浏览

haskell - 为Haskell Frp包安装windows?

我试图在 Windows 上安装响应式香蕉包,但收效甚微。它似乎知道这些软件包,但安装失败。有什么提示吗?


好的,我安装了所有的 wx-stuff - 采取了几个步骤。wx-config,然后是 wxWidgets,然后安装 Haskell 部件(wx、wxcore、reactive-banana.wx)。但是基本的 Reactive 和 category-extras 仍然像上面那样失败。- 99 个附加类别中的第 39 步失败:


更新:

我发现 Haskell 的 Wx 宇宙有点乱。有很多关于这个的注释和关于windows上wx和wxHaskell问题的描述,在一些建议中需要旧版本的GHC等。代码与当前的MSoft编译器不兼容,所以需要安装其他编译器等等。总而言之在戳了几个小时后,我感到相当失望。我确实安装了 wx-config、wxPack、wxWidgets,然后是 wxHaskell,然后是 cabal wx & wxcore; 所有报告成功 - 仍然失败(未找到 wxmsw28_gcc.dll;虽然它在库中)。他们的初始测试(样本/对照......)失败了。wxWidgets 和 wxHaskell 页面上的所有示例链接以及更多链接都已损坏。重新启动后(?!)它似乎确实运行了一些测试 - 所以我现在希望成功。

我希望有一种神奇的“apt-get install”之类的体验。

对于 FRP——FRP 示例(在 leksah 中)给出了很多:“Link destinations not found for...”错误消息,但到目前为止确实可以运行。

总而言之,根据我的经验,wxHaskell 和 FRP 在 Windows 上似乎不太容易使用。当然,我不会分配给一个班级来尝试作为 Haskell 易用性和实用性的一个很好的例子!:-)

我很欣赏这些软件包中涉及的所有复杂性和工作,我无意抱怨——只是一份经验报告。也许 wxHaskell 包不常用,或者..??

0 投票
4 回答
871 浏览

haskell - Haskell:FRP 反应性 Parsec?

Haskell 中是否有(或可能有)反应式Parsec(或任何其他纯函数式解析器)?

简而言之,我想逐个字符地为解析器提供数据,并获得与我提供的足够多的结果一样多的结果。

或者更简单,我怎么能做到foldr或至少map

我们是否需要它们的不同版本来支持这种反应行为?

编辑

我的问题特别是关于 FRP。我以解析器为例,这是我能想到的最好的方法来澄清我的问题并全面了解我的需求。

我相信 FRP 不仅仅是关于 UI,对吧?