javascript - 如何在 React 中正确更改多个嵌套对象数组的状态?

标签 javascript reactjs react-native setstate

在 React 中更改多个嵌套对象数组的状态的最佳方法是什么?让我们看下面的示例:我有一个组件将显示每种流派的顶部播放列表。我有一个属性genre,它是一个对象数组,每个对象都有一个属性songs,它也是一个对象数组。如果我想将名为 Soldier of Fortune 的歌曲更改为 Child in Time(假设在 Change 函数中作为参数,我已经从 UI 更改中提供了歌曲和流派的索引)。如何访问多层嵌套对象而不改变状态?

this.state = {
    title: 'Top playlists',
    genres: [
      {
        genreName: 'pop',
        followers: 2456,
        songs: [
          {
            title: 'Soldier of fortune',
            author: 'Deep Purple',
          },
        ],
      },
    ],
  };

handleChangeSongName = (e, genreIndex, songIndex) => {
    // genreIndex = 0;
    // songIndex = 0;
    // e.target.name = title;
    // e.target.value = "Child in time"  
    ...What to do here?
  }

最佳答案

您可以将您的handleChangeSongName函数修改为:

  handleChangeSongName = (e, genreIndex, songIndex) => {
// genreIndex = 0;
// songIndex = 0;
// e.target.name = title;
// e.target.value = "Child in time"  
this.setState((prevState) => {
  let temp = {
    ...prevState,
    genres: [...prevState.genres]
  }

  // change title "Soldier of fortune" to "Child in time"
  temp.genres[genreIndex].songs[songIndex][e.target.name] = e.target.value

  return temp
})

}

关于javascript - 如何在 React 中正确更改多个嵌套对象数组的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56369597/

相关文章:

asp.net - 如何将服务器控件的实际客户端 ID 传递给 javascript 函数?

javascript - React-redux REST API this.state 为 null

javascript - Knockout-3.2.0 - 内部列表 <object> 推送问题

javascript - 如何可靠地测量 React 组件的弹出框和标注的计算位置?

firebase - react-native-firebase 包是否处理 "Setting a timer for a long period of time is a performance and correctness issue"警告?

react-native - react 导航中的通用/共享屏幕路由?

ios - 在 native react native 模块中将资源文件添加到 iOS

javascript - 如何使用下划线进行映射但不向结果添加虚假值

javascript - 将鼠标悬停在没有包装器的样式组件上

reactjs - 在 React 中将函数传递给 'dumb' 组件中的处理程序的正确方法