如果我有一个可观察的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
是否有效。因为如果是,那么我的程序还有其他问题。
答案 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
)