Javascript 更新时对嵌套状态项的响应引用
我的Javascript 更新时对嵌套状态项的响应引用,javascript,reactjs,state,Javascript,Reactjs,State,我的状态如下所示: brands:[{key:'0', cars:[]}, {key:'2', cars:[]}, {key:'3', cars:[]}] 每个car数组的形式如下: [{key:'0', color:'Red', detail:''}, {key:'1', color:'Green', detail:''}] 我将每个品牌列表映射到一个组件 每个品牌都将其汽车映射到: 单击汽车时,将对父级调用fetchDetailCallback,从我的数据库中获取关于汽车的更多详细信息
状态
如下所示:
brands:[{key:'0', cars:[]}, {key:'2', cars:[]}, {key:'3', cars:[]}]
每个car
数组的形式如下:
[{key:'0', color:'Red', detail:''}, {key:'1', color:'Green', detail:''}]
我将每个品牌列表映射到一个组件
每个品牌都将其汽车映射到:
单击汽车时,将对父级调用fetchDetailCallback,从我的数据库中获取关于汽车的更多详细信息
然后如何更新状态以填写这些详细信息
function carDetailCallback(brandKey, carKey){
//fetch detail from database code here
this.setState({brands[brandKey][carKey]: detail})
}
当然,this.setState({'statemens'[brandKey][carKey]:detail})
不起作用,因为键不是真正的键,它们是数组中名称-值对的名称
我应该如何在状态中引用正确的汽车
,以便对其进行更新
我是否必须搜索各个品牌以找到具有匹配钥匙的汽车,然后搜索该品牌的汽车以找到具有匹配钥匙的汽车,然后在更新后使用此.setState()替换整个品牌?更新状态中的值似乎有很长的路要走。您可以使用来获取特定的品牌和汽车对象,并找到要更新的项目的索引
示例
const data = { brands:[{key:'0', cars:[{key:'0', color:'Red', detail:''}, {key:'1', color:'Green', detail:''}]}, {key:'2', cars:[{key:'0', color:'Red', detail:''}, {key:'1', color:'Green', detail:''}]}] };
const brand = data.brands.find((brand) => brand.key === brandKey);
const car = brand.cars.find((car) => car.key === carKey);
const brandIndex = data.brands.findIndex((brand) => brand.key === brandKey);
const carIndex = brand.cars.findIndex((car) => car.key === carKey);
this.setState({ brands[brandIndex][carIndex]['details']: details });
您可以使用获取特定品牌和汽车对象,并查找要更新的项目的索引
示例
const data = { brands:[{key:'0', cars:[{key:'0', color:'Red', detail:''}, {key:'1', color:'Green', detail:''}]}, {key:'2', cars:[{key:'0', color:'Red', detail:''}, {key:'1', color:'Green', detail:''}]}] };
const brand = data.brands.find((brand) => brand.key === brandKey);
const car = brand.cars.find((car) => car.key === carKey);
const brandIndex = data.brands.findIndex((brand) => brand.key === brandKey);
const carIndex = brand.cars.findIndex((car) => car.key === carKey);
this.setState({ brands[brandIndex][carIndex]['details']: details });
既然您使用的是React,那么您必须使用babel。试试
{[句子[brandKey][carKey]]:detail}
我的意思是,在州的数据结构中,键不以这种方式工作,因此如何在州中找到并更新正确的“car”。只需搜索还原剂成分。这可能会帮助您理解iThanks,但建议我先学习在不使用Redux的情况下构建React应用程序,然后再学习它?因为您使用的是React,所以您必须使用babel。试试{[句子[brandKey][carKey]]:detail}
我的意思是,在州的数据结构中,键不以这种方式工作,因此如何在州中找到并更新正确的“car”。只需搜索还原剂成分。这可能会帮助您理解iThanks,但建议我先学习在不使用Redux的情况下构建React应用程序,然后再学习它?这只是从数组中提取汽车对象吗?如何获取指针以在状态中更新它?这只是从数组中提取car对象吗?如何获取指针以在状态中更新它?