Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 更新ImmutableJS记录的多个字段的推荐方法是什么?_Typescript_Immutability_Record_Immutable.js - Fatal编程技术网

Typescript 更新ImmutableJS记录的多个字段的推荐方法是什么?

Typescript 更新ImmutableJS记录的多个字段的推荐方法是什么?,typescript,immutability,record,immutable.js,Typescript,Immutability,Record,Immutable.js,我有ImmutableJS记录,我想更新多个字段,推荐的方法是什么 我尝试过变异,但由于某种原因,我得到的副本是空的,我无法对其进行变异: const UserRecord = Record({ firstName: null, lastName: null, address: { city: null, zipCode: null } }); export function createUserRecord(data) { return new Use

我有ImmutableJS记录,我想更新多个字段,推荐的方法是什么

我尝试过变异,但由于某种原因,我得到的副本是空的,我无法对其进行变异:

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}}

谢谢大家!

带有突变的方法
不会改变对象
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)
});

请看来自的文档中的这个示例


我已编辑了问题,请再次检查。谢谢你的回答!我将您的代码复制到JSFIDLE。结果是-
Object{firstName:“John”,lastName:“Don”,address:Object}Object{firstName:“newfirstname”,lastName:“New lastName”,address:Object}
。对象
u
保持原样,您得到的新对象,即
newU
具有firstName和lastName的新值,街道仍然是纽约1111
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);