我有ImmutableJS Record,我想更新多个字段,推荐的方式是什么?
我试过withMutations但由于某种原因,我得到的副本是空的,我不能改变它:
const UserRecord = Record({
firstName: null,
lastName: null,
address: {
city: null,
zipCode: null
}
});
export function createUserRecord(data) {
return new UserRecord(fromJS(data));
}
let u = createUserRecord({
firstName: 'John',
lastName: 'Don',
address: {
city: 'New York',
zipCode: 1111
}
});
let newU = u.withMutations((uCopy) => {
// uCopy is empty (with default values)
uCopy.set('firstName', 'New FirstName');
uCopy.set('lastName', 'New LastName');
// uCopy is still empty (not mutated)
});
console.log(u.toJS()); // {firstName: "John", lastName: "Don", address: {city: null, zipCode: null}}
console.log(newU.toJS()); // {firstName: null, lastName: null, address: {city: null, zipCode: null}}
谢谢!
答案 0 :(得分:1)
方法withMutations
不会更改对象u
。它改为返回一个变异的对象,所以你需要像这样调用它
let newU = u.withMutations((uCopy) => {
// uCopy is empty (with default values)
uCopy.set('firstName', 'New FirstName');
uCopy.set('lastName', 'New LastName');
// uCopy is still empty (not mutated)
});
在https://facebook.github.io/immutable-js/
的文档中查看此示例var list1 = Immutable.List.of(1,2,3);
var list2 = list1.withMutations(function (list) {
list.push(4).push(5).push(6);
});
assert(list1.size === 3);
assert(list2.size === 6);