Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新时对嵌套状态项的响应引用_Javascript_Reactjs_State - Fatal编程技术网

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对象吗?如何获取指针以在状态中更新它?