React 中对象数组的 SetState

新手上路,请多包涵

好的,所以我很沮丧找到正确的解决方案,所以我在这里发布问题。给出答案会对我有很大帮助,因为我被卡住了!

状态树看起来像这样

this.state = {
      itemList : [{
                    _id : 1234,
                   description : 'This the description',
                   amount : 100
                    }, {
                    _id : 1234,
                   description : 'This the description',
                   amount : 100
                    }],
     }

问题是:

  1. 无法根据_id更新数组Object中的任何特定key
  2. 以前的状态应该保持不变

原文由 Saikat Dey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 594
2 个回答

2018 年 3 月 25 日回答

这就是您如何使用 setState 和 prevstate 来更新数据结构中对象的某个属性。

 this.setState(prevState => ({
    itemList: prevState.itemList.map(
    obj => (obj._id === 1234 ? Object.assign(obj, { description: "New Description" }) : obj)
  )
}));

2019 年 12 月 12 日回答(反应钩子)

 import React, { useState } from 'react';
const App = () => {
  const [data, setData] = useState([
    {
      username: '141451',
      password: 'password',
      favoriteFood: 'pizza',
    },
    {
      username: '15151',
      password: '91jf7jn38f8jn3',
      favoriteFood: 'beans'
    }
  ]);
  return (
    <div>
    {data.map(user => {
      return (
        <div onClick={() => {
          setData([...data].map(object => {
            if(object.username === user.username) {
              return {
                ...object,
                favoriteFood: 'Potatos',
                someNewRandomAttribute: 'X'
              }
            }
            else return object;
          }))
        }}>
        {JSON.stringify(user) + '\n'}
        </div>
      )
    })}
    </div>
  )
}

原文由 Omar 发布,翻译遵循 CC BY-SA 4.0 许可协议

要更新这样构造的状态,您必须找到要更新的元素的索引,复制数组并更改找到的索引。

如果将记录列表作为对象保存,将 id 作为键并将记录作为值,它会更容易和更易读。

原文由 simka 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进