如何使用 RxJS 对数据变化做出“反应”?

2024-03-08

RxJS 初学者:我在使用 RxJS 保存和跟踪数据更改时遇到问题。假设我在小视图/小部件中构建我的应用程序,每个视图/小部件都有自己的状态,并且应该对数据更改执行操作。我怎么做?

更具体的例子。假设我有一个名为Widget and Widget有标题和按钮。状态应包含标题和信息if该按钮已被单击。通过阅读 RxJS 的文档,这似乎是一个很好的起点:

var widgetState = new Rx.Subject().startWith({
  wasClicked: false,
  title: 'foo'
});

现在我想在某些数据发生变化时收到通知:

var widgetStateChanges = widgetState.subscribe(function(data) {
  console.log('data: ', data);
  // what do i do with the data here?
  // i would like to merge the new data into the old state
});

widgetStateChanges.onNext({ title: 'bar' });

我聆听这些变化,但我不知道如何聆听save他们。如果发生某些数据更改,我还想做一些特殊的事情。像这样的东西。

widgetStateChanges.filter(function(e) {
  return e.wasClicked;
}).do(function(e) {
  console.log('Do something because was clicked now.');
});

然而我不能filter订阅(widgetStateChanges),只有一个主题(widgetState).


Use a BehaviorSubject跟踪可观察的状态:

var widgetState = new Rx.BehaviorSubject({ wasClicked: false, title: 'foo' });

// change state, probably in response to UI events
// Note we always set the full state, not just the "delta"
widgetState.onNext({ wasClicked: true, title: 'foo2' });

// example listening to title input field and updating state
// assumes rxjs-jquery
$("#title").onAsObservable("change").subscribe (function (ev) {
    var oldState = widgetState.value;
    var newTitle = $("#title").val();
    // do not mutate the oldState object, instead clone it and change the title
    var newState = $.extend({}, oldState, { title: newTitle });

    // send the update
    widgetState.onNext(newState);
});

// listen to new state values, probably to update your HTML?
widgetState.subscribe(function (newState) { ... });

// listen only when wasClicked is true
widgetState
    .filter(function (s) { return s.wasClicked; })
    .subscribe(function (s) { ... });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 RxJS 对数据变化做出“反应”? 的相关文章

  • 如何检测被覆盖的 CSS 属性?

    I can get all css properties for an element with document stylesheets but some of those are not active because those pro
  • 如何使用 JavaScript 刷新页面?

    如何使用 JavaScript 刷新页面 Use location reload https developer mozilla org en US docs Web API Location reload 例如 每当元素带有以下内容时重新
  • Chrome 扩展程序可以相互通信吗?

    我正在编写一个Chrome扩展程序 并且想要实现一个接口或api 以便我将来制作的其他扩展程序可以使用它 最终的效果可能如下 分机 B 呼叫extensionA someMethod someParameters 并向分机A发送一些数据 分
  • HTML 和 标签有什么区别?

    HEAD 标签和 BODY 标签有什么区别 大多数 HTML 书籍仅 简短 提及 and 标签 但它们消失得很快 它们会影响浏览器呈现网页的方式吗 另外 它们会影响 javascript 的运行顺序吗 我的意思是 如果我里面有一个javas
  • 如何在 google.maps.event.addListener 中使用它

    以下示例有效 但是当我尝试传递参数并使用this在该功能不起作用 Working google maps event addListener markers i click showInfoWindow function showInfoW
  • 角度垫排序不适用于带点表示法的 matColumnDef

    我正在尝试按列对表进行排序 当我必须过滤另一个结果中的结果时 就会出现问题 我尝试通过括号表示法和点表示法访问该属性 但没有给出结果 还将最终节点放置在 matColumnDef 中 但失败 因为有 2 列同名 table table
  • 如何在 JavaScript 中将变量的内容写入文件[重复]

    这个问题在这里已经有答案了 可能的重复 firefox 如何启用本地 JavaScript 来读取 写入我的 PC 上的文件 https stackoverflow com questions 2846045 firefox how to
  • 自调用函数未定义

    如果我声明一个函数文字 var x function alert hi console log x returns the function code However var x function alert hi console log
  • 修改 Twitter 帖子上可编辑 Div 的内容

    我正在编写一个 chrome 扩展 它可以帮助用户在 Twitter 上输入内容 当在 twitter 上写推文时 twitter 会打开一个可编辑的 div 容器 当用户输入内容时 twitter 大概正在使用某些网络框架 会生成子 di
  • 非法使用break语句; javascript

    当这个变量达到一定数量时 我希望循环停止 但我不断收到错误 未捕获的语法错误 非法的中断语句 function loop if isPlaying jet1 draw drawAllEnemies requestAnimFrame loop
  • 如何根据另一个下拉列表中的选择动态填充下拉列表中的选项?

    我有一个表 其中包含类别信息 例如产品 我已将它们列在下拉菜单中 现在 我需要做的是 在下一个下拉菜单中列出所选类别的子类别 我希望 javascript 是必需的 但我对 javascript 还不太熟悉 将非常感谢您的帮助 你应该使用
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一
  • Aurelia 中的角度服务?

    我还没有找到详细说明如何从 Angular 1 x 迁移到 Aurelia 的详细文档 到目前为止 我只看到人们详细介绍了 Angular 的概念directive可以在 Aurelia 中使用重制 customElement 好吧 足够简
  • 在 Nodejs 中,如何停止 FOR 循环直到 MongoDB 调用返回

    我正在研究下面的代码片段 我有一个名为 stuObjList 的 JSON 对象数组 我想循环遍历数组以查找具有特定标志集的特定 JSON 对象 然后进行数据库调用以检索更多数据 当然 FOR 循环不会等待数据库调用返回并到达 j leng
  • 使用 ng-if 改变角度方向

    我想通过单击将方向从 rtl 更改为 ltr and in 设置 html
  • 在javascript中创建图像的缩略图方块(不丢失纵横比)

    我正在制作一个客户端拖放文件上传脚本作为书签 在上传之前 我使用 File API 将图像读取为 base64 格式并将其显示为缩略图 This is how my thumbnails look like I want them to l
  • 如何从除自身之外的其他(blazor)库引用js/css文件?

    我如何引用 使用位于引用的 blazor 项目中的 css cs 文件 该文件与 host cshtml 中的当前项目不同 我的意思是
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than
  • 为什么 try catch 块没有捕获 Promise 异常?

    我对承诺的错误处理感到困惑 答案可能很明显 但我不明白 我有以下示例代码 var test async function throw new Error Just another error try test then catch err

随机推荐

  • 定期重置嵌入式 H2 数据库

    我正在演示服务器中设置应用程序的新版本 并且希望找到一种每天重置数据库的方法 我想我总是可以有一个 cron 作业执行删除和创建查询 但我正在寻找一种更干净的方法 我尝试使用带有删除创建方法的特殊持久性单元 但它不起作用 因为系统频繁地 按
  • 无法使用 C# 中的 CryptEncrypt/CryptDecrypt 进行解密

    我制作了一个小应用程序来加密和解密一些文本 只要我直接使用加密中的字节数组 一切都很好 但是 一旦我复制了数组来模拟将加密文本作为文件发送的过程 解密就不会运行 为什么我无法使用复制的数组运行解密 using System using Sy
  • Python 中的事件驱动系统调用

    我正在尝试使用系统调用或子流程来实现事件驱动的流程 基本上我想启动一个非阻塞系统命令 并在完成该系统调用后 我想要调用一个函数 这样我就可以启动 GUI 进度条 启动系统命令并让进度条继续 当系统调用完成时 让进度条停止 我绝对不想做的是生
  • 在 html 字符串中插入 JavaScript 数组中的随机元素

    我有一个字符串数组 var prepositions on in under behind above 我想将此数组中的随机元素插入到 html 字符串中所示的间隙处 The yellow object is the blue object
  • WordPress pre_get_posts 和 date_query

    我正在尝试使用 pre get posts 挂钩来更改年度存档结果 以便它显示整个学年的帖子 我使用的是 WordPress 版本 3 9 2 function get posts by academic year query if que
  • 如何通过revit API访问所有族类型?

    是否可以使用 Revit API 访问特定类别 例如窗户 门等 的所有族类型 与实例相反 据我所知 使用 FilteredElementCollector doc OfCategory ToElements 或 FilteredElemen
  • 根据输入字段的值更改文本颜色或背景[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 Javascript 更改背景颜色 https stackoverflow com questions 197748 how do i change the background color
  • CQRS - 如何对场景执行系统进行建模

    我最近开始为我即将启动的一个绿地项目研究 CQRS 和 DDD 我研究了 Udi Dahan Greg Young Mark Nijhof 等人的大量资料 这些确实非常有帮助 我想我对这些概念有了很好的理解 但是 我仍然有一些关于如何将这些
  • Android:如何将 ActionBar“Home”图标更改为应用程序图标以外的其他图标?

    我的应用程序的主图标在一张图像中由两部分组成 一个徽标和其下方的几个字母 这对于应用程序的启动器图标效果很好 但是当图标出现在 ActionBar 的左边缘时 字母会被切断 看起来不太好 我想为 ActionBar 提供一个单独版本的图标
  • 笨拙地计算一组递增数字之间的差异,有更漂亮的方法吗?

    下面的代码工作得很好 但看起来很冗长 肯定有更优雅的方法来计算这个吗 我的想法是 我有一个包含 100 个递增时间戳的列表 我想查看这些时间戳并计算每个时间戳之间的平均时间 下面的代码可以运行 但我确信像这样反转列表确实效率很低 有什么建议
  • 替换除正数/负数之外的所有内容

    对于替换所有正数 许多问题已经得到解答 但是 我找不到任何保留正数和负数的答案 我想替换所有非数字 正数或负数 的内容 输出应如下所示 例如 0 success id 1234 gt 0 1234 and 10 failure id 234
  • Composer 从同一存储库上的另一个分支拉取依赖项

    我有以下 Composer 1 6 5 设置 require CRMPicco GolfBundle dev golf bundle repositories type git url email protected cdn cgi l e
  • 使用 VB.NET 的秒表循环

    我想使用 VB NET 创建一个带有此接口的简单计时器 我想按 Button1 并开始在文本框中计算秒数 我不想使用计时器组件 因为它不提供高分辨率 https stackoverflow com questions 10470276 my
  • 如何使用Content Provider实现复杂的查询?

    我问这个问题是因为我不太确定如何与 Android 内容提供商合作 我的数据库子集包含 8 个表 我需要创建复杂的查询来获取一些数据 我的内容提供程序可以很好地处理简单的查询 例如 我的表上有一个 PersonPersonModel jav
  • 检查 JavaScript 中的全局属性/函数是否已被覆盖

    JavaScript 可以轻松覆盖全局对象的属性和函数 我想找到一种方法来检查全局属性的原始版本是否已被替换 考虑有人将其放入 HTML 中 如果 myscript js 在某处调用encodeURIComponent 函数 它现在的行为将
  • 将 XX:XX AM/PM 转换为 24 小时制

    我搜索过谷歌 但找不到如何获取字符串 xx xx 上午 下午 例如下午 3 30 并将其更改为现在的 24 小时 例如 前一个时间是 15 30 我研究过简单地使用 if then 语句来操作字符串 但它看起来非常乏味 有什么简单的方法可以
  • 覆盖 Spring 表单错误消息

    在 Spring 中如何覆盖默认表单错误消息 我正在使用一个Validator和一个属性文件来添加我自己的错误消息 但是 例如 如何覆盖因转换 编码错误而打印的消息 它们似乎是自动生成的 我认为对用户没有帮助 Failed to conve
  • 如何优化查找相关性的极其缓慢的 MySQL 查询

    我有一个非常慢 通常接近 60 秒 的 MySQL 查询 它试图找到用户对一项民意调查的投票方式与他们对所有先前民意调查的投票方式之间的相关性 基本上 我们收集在给定民意调查中投票给某一特定选项的每个人的用户 ID 然后 我们查看该小组如何
  • 打开 dired 并选择与前一个缓冲区关联的文件?

    假设我正在编辑blah txt使用 Emacs 我决定打开dired以重命名文件 https stackoverflow com questions 384284 can i rename an open file in emacs 384
  • 如何使用 RxJS 对数据变化做出“反应”?

    RxJS 初学者 我在使用 RxJS 保存和跟踪数据更改时遇到问题 假设我在小视图 小部件中构建我的应用程序 每个视图 小部件都有自己的状态 并且应该对数据更改执行操作 我怎么做 更具体的例子 假设我有一个名为Widget and Widg