typescript - Vad är det rekommenderade sättet att uppdatera flera fält i en ImmutableJS Record?
Jag har en ImmutableJS Record och jag vill uppdatera flera fält, vad är det rekommenderade sättet?
Jag försökte med withMutations men av någon anledning är kopian jag får tom och jag kan inte mutera den:
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}}
Tack!
Svar #1
Metoden withMutations ändrar inte objektet u. Den returnerar ett muterat objekt istället, så du behöver kalla på det så här
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)
});
Ta en titt på detta exempel i dokumentationen från 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);
