改变可观察值中的值

2024-01-23

如果我有一个可观察的student: Observable<Student> where Student有参数name: string被设定为Jim,我怎样才能改变的值name in the students可观察到的是Bob?

Edit:

Is student.map(student => student.name = 'Bob')应该可以工作。因为如果是的话,那么我的程序还有其他问题。


@ZahiC 的答案是正确的,但让我解释一下原因。

首先,对于 Rxjs,副作用越少越好。 不变性是你的朋友!否则,当你的应用程序不断增长时,试图猜测对象在哪里发生了变异将是一场噩梦。

第二,自从打字稿 2.1 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html您可以使用对象传播。这意味着要更新学生对象,而不是执行以下操作:

const newStudent = Object.assign({}, oldStudent, {name: 'new student name'});

你可以做:

const newStudent = {...oldStudent, name: 'new student name'};

在这两种情况下,您都不会改变原始学生,而是创建一个具有更新值的新学生。

最后一件事是如何将其与 Rxjs 结合起来。
The map运算符的作用是:获取一个值,用它做你想做的事情,然后返回一个新的值,该值将在可观察链中使用。

所以,而不是:

student.map(student => student.name = 'Bob');

你应该这样做(正如@ZahiC 指出的):

student.map(student => ({...student, name: 'Bob'}));

为了避免隐藏变量名称,您可能还想调用您的可观察量:student$

student$.map(student => ({...student, name: 'Bob'}));

EDIT:
从 Rxjs 5.5 开始,您不应该使用 Observable.prototype 上修补的运算符,而应使用管道运算符:

student$.pipe(
  map(student => ({...student, name: 'Bob'})),
  tap(student => console.log(student)) // will display the new student 
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

改变可观察值中的值 的相关文章

随机推荐

  • 将 Python 字典列表转换为 Postgresql json 数组

    我正在尝试将 jsonb 元素的 Python 2 7 列表插入到具有数据类型列的 Postgresql 9 4 表中 jsonb 这是一些代码 import json anArray name Joe age 51 yob 1964 ge
  • 通过手写汇编调用本机代码

    我正在尝试从托管程序集中调用本机函数 我已经在预编译库上完成了此操作 一切都很顺利 目前我正在建立自己的图书馆 但我无法完成这项工作 本机 DLL 源代码如下 define DERM SIMD EXPORT declspec dllexpo
  • 春天。 @RequestBody 的映射字段与 @PathVariable

    现在我有这样的代码 RestController public class ChildController RequestMapping value parents parentId addChild method RequestMetho
  • 从选定的数据库中选择选项值

    我有一个小问题 我有一个 edit php 页面 该页面列出了可以编辑的产品信息 我运行一个查询 while rows mysql fetch assoc query echo
  • 如何使用 Cython 将 Python 3 编译为 C

    我正在尝试将 Python 3 脚本转换为 C 然后将该 C 文件编译为可执行文件 我有这个简单的 python 脚本 def greet name print Hello 0 format name if len name gt 0 el
  • 更改命名空间前缀 WCF 信封

    我想知道是否可以更改 WCF SOAP 请求的命名空间前缀 正如您在下面的示例中看到的 The Envelope 的命名空间为 http www w3 org 2005 08 addressing 前缀为 a 我想将其更改为 foo 我怎样
  • 如何将任务的已取消状态传播到继续任务

    我在我的应用程序中使用任务并行库 我有一个任务 我们称之为 DoSomething 可能会被取消 无论任务出现故障 取消还是成功完成 我都会向该任务附加一个延续来执行一些清理工作 在启动此任务的代码中 我想返回一个 Task 对象 其状态
  • SWIG C++ 到 Python:警告(362):运算符=被忽略

    我正在将 C 类导出到 Python 我注意到在编译过程中 SWIG 发出以下警告 Warning 362 operator ignored 我不确定为什么操作符超载 因为它在SWIG 文档 http www swig org Doc1 3
  • camera2 捕获的图片 - 从 YUV_420_888 转换为 NV21

    通过camera2 API 我们接收以下格式的图像对象YUV 420 888 然后我们使用以下函数转换为NV21 private static byte YUV 420 888toNV21 Image image byte nv21 Byt
  • Oracle中INSTR和LIKE有什么区别?

    有人可以告诉我两者之间的区别吗INSTR and LIKE在甲骨文中 Oracle10g中哪一个更快 这取决于数据和模式 如果你使用like a 那么 Oracle 可以使用 BTree 索引来查找匹配项 因为它可以以模式开头搜索 BTre
  • Angular CLI 无法创建新项目

    如何从 angular cli 创建新项目 Angular CLI 有问题 已经关门了 我认为仍然存在问题https github com angular angular cli issues 5543 event 1009616731 h
  • 故事板静态单元:dequeueReusableCellWithIdentifier 返回 nil

    使用故事板 静态单元格cellForRowAtIndexPath 线 UITableViewCell cell tableView dequeueReusableCellWithIdentifier CellIdentifier 总是返回n
  • Capybara webkit 不传递来自 Angular 的参数

    我正在尝试将 selenium 测试套件移植到 capybara webkit Rails 应用程序在 Rails 视图中嵌入了一个角度应用程序 并且其行为不符合预期webkit 像这样的测试 需要 spec helper feature
  • CSS 线性渐变和 Canvas 线性渐变与不透明度设置不同

    我想在画布上实现 CSS 定义的相同线性渐变外观 使用了一种在不使用透明度设置之前效果很好的方法 当使用相同的线性渐变颜色设置定义 rgba 颜色值时 结果看起来不一样 请参阅以下链接 JSFiddle Example https jsfi
  • 如何通过 System.out.println("Morning") 创建对象,REACHABLE?

    在下面的声明中 System out println Morning 包含值 Morning 的对象是在字符串池中创建的 而且我们没有明确存储它的地址 但这个对象仍然是可达的 如果我们尝试重新做System out println Morn
  • C++ 中 main 之前发生了什么?

    我知道在 C 中 在应用程序可以开始之前main 某些实体必须 初始化全局变量 将堆栈指针设置为最低堆栈区域地址 假设堆栈向上增长 问题 1 做这些事情的实体是什么 谁写的 问题 2 C 中还有其他东西吗 我假设对象构造函数和初始化都是在应
  • 如何将浮点数存储为文本而不丢失精度?

    就像问题所说的那样 与 截断的 字符串表示形式之间的转换可能会影响其精度 但是将它们存储为其他格式 例如 pickle 会使它们不可读 是的 我也想要这个 如何在文本中存储浮点数而不丢失精度 将其存储为二进制或其幂 gt gt gt 3 4
  • Pytest Finalizers - 执行顺序

    我正在编写 py test 程序 考虑以下 py test 夹具代码 pytest fixture scope class def my fixture request def fin1 print fin1 request addfina
  • 预编译 ASP.NET 2.0 站点上出现编译错误 CS0433

    当我启动调试器来调试我的网站时 我经常收到此错误 我使用 Telerik 控件 通常错误出现在我的选项卡条中 这是我现在正在查看的错误的示例 Compiler Error Message CS0433 The type ASP contro
  • 改变可观察值中的值

    如果我有一个可观察的student Observable