Javascript 使用不变性帮助器更新处于React状态的数组对象

Javascript 使用不变性帮助器更新处于React状态的数组对象,javascript,reactjs,immutability,Javascript,Reactjs,Immutability,我正在使用更新处于React状态的数组中的对象 我要修改的对象是嵌套的: this.state={ a:{ b:[{c:'',d:''},] } } 我想使用不变性助手更新b的第n个元素中的prop c 没有不变性助手的等效代码是: const newState=Object.assign({},this.state); newState.a=Object.assign({},newState.a); newState.a.b=newState.a.b.slice(); newState.a

我正在使用更新处于React状态的数组中的对象

我要修改的对象是嵌套的:

this.state={
a:{
b:[{c:'',d:''},]
}
} 
我想使用不变性助手更新b的第n个元素中的prop c

没有不变性助手的等效代码是:

const newState=Object.assign({},this.state);
newState.a=Object.assign({},newState.a);
newState.a.b=newState.a.b.slice();
newState.a.b[n]=Object.assign({},newState.a.b[n]);
newState.a.b[n].c='newvalue';
this.setState({newState});

我知道上面的代码有点难看。我假设使用不变性助手的代码可以解决我的问题。感谢

我从immutability helper导入
更新:)


一种方法是使用
$set

let index = 0;
let newState = update(this.state, {
   a: {
     b: {
      [index]: {
               c: { $set: "new value"}
       }
    }
  }
});
this.setState(newState);

考虑使用ImmutableJS。update是否返回一个新的对象/元素,如abc=object.assign({},xyz)或它更改作为参数指定的对象???@VrajSolanki在本例中,它将返回新的状态对象,带有新的
a
对象(其余键相同,旧引用),其中包含新的
b
数组,所有元素引用都不会更改,但只会更改一个。使用
c
的新引用,其余将是旧引用。@VrajSolanki$set命令将“完全替换目标”。$merge命令将
对象
的键与目标合并。别忘了从不变性助手导入“更新”。从“不变性助手”导入更新;
let index = 0;
let newState = update(this.state, {
   a: {
     b: {
      [index]: {
               c: { $set: "new value"}
       }
    }
  }
});
this.setState(newState);