更改可观察值

时间:2017-12-12 23:33:52

标签: javascript typescript rxjs

如果我有一个可观察的student: Observable<Student>,其中Student的参数name: string设置为Jim,我如何更改name中的值students Bob student.map(student => student.name = 'Bob')可观察到Dim frmErr As Boolean

编辑:

Private Sub Form_Load() frmErr = True End Sub Private Sub Form_Error(DataErr As Integer, Response As Integer) frmErr = True End Sub 是否有效。因为如果是,那么我的程序还有其他问题。

1 个答案:

答案 0 :(得分:4)

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

首先,使用Rxjs,你的副作用越少越好。 不变性是你的朋友!否则,当你的应用程序增长时,试图猜测某个对象的变异位置将成为一场噩梦。

其次,因为Typescript 2.1你可以使用对象传播。这意味着更新学生对象,而不是:

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

你可以这样做:

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

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

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

所以,而不是:

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

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

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

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

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

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

student$.pipe(
  map(student => ({...student, name: 'Bob'})),
  tap(student => console.log(student)) // will display the new student 
)