好吧,这个问题引起了我的问题 - 可能是你不能做出反应,但我希望你能做到 .

我有一个从api返回的场地列表,它们被映射到我父组件状态的数组:

this.state = {
      venues : []
}

除了映射场地名称,id等之外,还将“selected”的附加属性映射为布尔值设置为false .

此功能正常 .

然后将this.state.venues作为道具发送给子组件“Venues”,它将每组场地数据映射到名为“VenueItems”的大子组件的实例,例如,如果它返回四个场地,我们最终得到了四个VenueItems.js实例,每个实例包含名称,id,描述和'selected'属性,仍然设置为false .

“VenueItems”还包含一个可点击元素和一个单击处理程序,它将与该特定场地对象/实例关联的特定数据返回到父组件App.js.此功能也可以正常工作 .

当它返回到父组件时,我想将该特定场所的'selected'属性更改为true(这个想法是将更多细节呈现为特定于该场所)...这是我提到答案的地方at:How to update a nested state in React这很棒,但是不允许在你的物体中间晃动阵列爆炸(!)

迄今为止我能够提出的最好的(在父组件中)就是这样 - 其中'places'是点击处理程序为特定场所返回的数据:

populateSelectedVenue = (venue) => { 
    this.state.venues.forEach(item => {

`      this.setState(prevState => ({
        ...prevState,
        venues: {
          ...prevState.venues,
           item: {
            ...prevState.venues.item.selected: false
           }
        }
      })`

    });
}

......但这并没有让我到处都是 . 更令人讨厌的是,它没有抛出任何明显的console.errors,我可以使用它 - 它只是没有填充'选定'属性 . 我的怀疑是“项目”不被接受为树的一部分,但我不知道如何绕过这个...任何想法的人?提前致谢 .

'场地'参数是来自场地的数据被点击 . 以某种方式将用于识别应该选择哪个实例添加到它 .

*** in a nutshell, the question here is how do you iterate through an array nested in this.state and change one of the properties in one of the iterations ***