2016-05-25 3 views
2

У меня есть ImmutableJS Запись, и я хочу обновить несколько полей, что рекомендуется?Каков рекомендуемый способ обновления нескольких полей 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

Я попробовал еще раз в скрипка, и это работает. Объект 'u' остается таким, каким он есть, и новый объект, который вы получили, а именно' newU' имеет новые значения для firstName и lastName, а улица все еще Нью-Йорк 1111 – iberbeu

ответ

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); 
+1

Я отредактировал вопрос, пожалуйста, проверьте его снова. Спасибо за Ваш ответ! –

+0

Я скопировал ваш код в jsfiddle. Результаты: 'Object {firstName:" John ", lastName:" Don ", адрес: Object} Объект {firstName:" New FirstName ", lastName:" New LastName ", адрес: Object}' – hazardous