我的州有嵌套对象:
constructor(props) {
super(props);
this.state = {
aba1Array: [
{
item:[
{
id: 1,
nome: "apple",
selected:false,
},
{
id: 2,
nome: "juice",
selected:false,
}
]
},
{
item:[
{
id: 3,
nome: "apple",
selected:false,
},
{
id: 4,
nome: "juice",
selected:false,
}
]
}
],
};
}
现在我想制作一个数组的副本,更新一个项目,再次设置setState(这是更新的正确方法,对吗?),该怎么做?这是我目前的代码:
updateItem(id){
let newItems = Object.keys(this.state.aba1Array).map((subitem) => {
subitem.item.map((item) => item.id===id ? {...item, selected: true } : item);
});
this.setState({ aba1Array: newItems });
}
这是回归: TypeError:undefined不是对象(评估'subitem.item.map')
编辑:当我添加第二级嵌套时,问题就开始了,在它只有一个级别正常工作之前,就像这样:
let newItems = Object.keys(this.state.aba1Array).map((item) => {
item.id===id ? {...item, selected: true } : item);
edited2:在屏幕的另一部分,我只列出了项目,我正在使用:
listItem() {
return this.state.aba1Array.map((subitem)=> {
return ( subitem.item.map((item) => { return ( <View>
......
它工作正常。为什么在更新功能中它给我错误?我不明白
编辑3: - 解决方案 -
我的解决方案是使用库object-path-immutable:
updateItem(itemIndex,subIndex){
const newObj = immutable.update(this.state.aba1Array, [subIndex,'item', itemIndex , 'selected' ], v => true );
this.setState({ aba1Array: newObj });
}
答案 0 :(得分:0)
我的解决方案是使用库object-path-immutable:
updateItem(itemIndex,subIndex){
const newObj = immutable.update(this.state.aba1Array, [subIndex,'item', itemIndex , 'selected' ], v => true );
this.setState({ aba1Array: newObj });
}
答案 1 :(得分:0)
最佳解决方案: 我忘了在map函数上返回值,所以新数组没有得到对象的完整树,最好的解决方案是:
let newItems = this.state.aba1Array.map((subitem) => {
subitem.item.map((item) => {
item.selected = true;
return item;
})
return subitem;
});