在Redux存储中查找并更新项目(集合中)

在Redux存储中查找并更新项目(集合中),redux,Redux,鉴于收集: const peeps=[ {姓名:'John',id:1}, {姓名:'Paul',id:2}, {姓名:'George',id:3}, {姓名:'Pete',id:4} ]; 在Redux商店中找到id为4的物品,并将名称更新为Ringo,而不发生突变,推荐的方法是什么 编辑:我知道更改对象的形状(使用带有ID键的对象)比更改数组要好,但我无法控制数据的形状,只能使用上面的形状。您可能希望在减速机中使用.map()方法。您的操作将包括一个负载id,它是要更新的peep的id,以

鉴于收集:

const peeps=[
{姓名:'John',id:1},
{姓名:'Paul',id:2},
{姓名:'George',id:3},
{姓名:'Pete',id:4}
];

在Redux商店中找到id为4的物品,并将名称更新为Ringo,而不发生突变,推荐的方法是什么


编辑:我知道更改对象的形状(使用带有ID键的对象)比更改数组要好,但我无法控制数据的形状,只能使用上面的形状。

您可能希望在减速机中使用
.map()
方法。您的操作将包括一个负载
id
,它是要更新的
peep
的id,以及一个用于更新的
newName

您的
peeps
状态:

const state=[
{姓名:'John',id:1},
{姓名:'Paul',id:2},
{姓名:'George',id:3},
{姓名:'Pete',id:4}
];
您的操作创建者将使用
id
newName
参数创建操作:

constupdateName=(id,newName)=>{
返回{
键入:“更新名称”,
有效载荷:{
身份证件
新名称
}
};
};
您将按如下方式发送操作:

dispatch(updateName(4,'Ringo'));
您的减速机将接收您的操作,并使用提供的
id
newName
映射所有
peep
,找到与给定
id
匹配的一个,并更新其
name
,使其与传入的
newName
相等

const peeps=(state=[],action)=>{
开关(动作类型){
案例“更新名称”:
const{id,newName}=action.payload;
//这将返回一个新数组,而不是对旧数组进行变异
返回状态.map(peep=>{
如果(peep.id==id){
peep.name=newName;
}
回望;
});
违约:
返回状态;
}
};

@httpNick关于更新状态树深处的元素,有很多问题。