gpt4 book ai didi

reactjs - 更改 redux reducer 中对象数组中键的值

转载 作者:行者123 更新时间:2023-12-03 14:18:55 26 4
gpt4 key购买 nike

我的数组是这样的:

var arrayObj = [{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'}];

我正在发送索引、键和值。

假设我将发送 (2, 'key2', 'hello') 然后reducer将上面的数组更新为:

var arrayObj = [{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'},{key1:'value1', key2:'hello'},{key1:'value1', key2:'value2'},{key1:'value1', key2:'value2'}];

所有数据都在action.payload中传入。我尝试过这样的事情:

 return {
...state,
arrayObj: [
...state.arrayObj.slice(0, action.payload.arrayObjIndex),
...state.arrayObj[action.payload.arrayObjIndex]: {
...state.arrayObj[action.payload.arrayObjIndex],
[action.payload.key]: action.payload.value,
},
...state.arrayObj.slice(action.payload.arrayObjIndex + 1),
],
};

但是上面的方法不起作用。

最佳答案

代码问题 - 从您正在更新的对象中删除 ...,因为您需要扩展数组(由切片返回),而不是对象。使用这个:

 return {
...state,
arrayObj: [
...state.arrayObj.slice(0, action.payload.arrayObjIndex),
{
...state.arrayObj[action.payload.arrayObjIndex],
[action.payload.key]: action.payload.value,
},
...state.arrayObj.slice(action.payload.arrayObjIndex + 1),
],
};
<小时/>

建议/其他可能的解决方案:

如果你知道索引,那么你可以直接更新对象,就像这样

case "String" : {
let arr = [...state.arrayObj]
arr[index] = {...arr[index]} // Object.assign({}, arr[index])
arr[index][key] = value
return {
...state,
arrayObj: arr
}
}

或者

case "String" : {
let arr = [...state.arrayObj]
arr[index] = {...arr[index], [key]: value} // Object.assign({}, arr[index], {[key]: value})
return {
...state,
arrayObj: arr
}
}

您也可以使用 map 或findIndex,如果该项目的索引未知,请检查此答案:

Update single value of array in redux reducer

关于reactjs - 更改 redux reducer 中对象数组中键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49526237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com