当前位置: 首页 > 知识库问答 >
问题:

如何在setState中同时编辑数组中对象的特定字段

岳阳文
2023-03-14

我们如何在数组中创建object的特定字段?

state.items = [
     {id:0, left: 100, right: 100, classified: true},
     {id:1, left: 200, right: 300, classified: false}, 
]
// Edit left, right, classified with given values,
// where the object's id is equal to 1.
state.items = [
     {id:0, left: 100, right: 100, classified: true},
     {id:1, left: 300, right: 200, classified: true}, 
]

下面是函数内部的代码(问题)

//console.log(id) <- prints 1. We are modifying the second object in the array with id 1.

// iterate items array
let { items } = this.state;
for (var index in items) { 
  if(items[index].id === id) {
     // copy the whole object matching id is 1.
     var deep = _.cloneDeep(tag); 

     //Assign new values (newLeft: 300, newRight:200, newCalssified: true)
     deep.left = newLeft
     deep.right = newRight
     deep.classified = newClassified

    this.setState({
      // HERE IS THE QUESTION
      taggedClothes // how do we modify the object with id 1??
    })
  }
}

谢谢!!

共有1个答案

陆洲
2023-03-14

您需要修改整个items数组,然后执行setstate来更新整个items数组。

const items = _.cloneDeep(this.state.items);

// Find index to modify
const index = items.findIndex(i => i.id === id);
items[index].left = newLeft;
items[index].right = newRight;
items[index].classified = newClassified;

this.setState({items});

编辑:如下文所述,突变状态并不总是一个好主意。我在开头添加了_.cloneDeep,但请查看此帖子以获得更多信息和其他选项:React:如何更新SetState上的State.Item[1]?(使用JSFiddle)

 类似资料:
  • 问题内容: 因此,我已经进行了一段时间的尝试,并认为最好重构我的代码,以便将状态设置为对象数组。我想做的是单击按钮时增加一个数字。 我在组件中有一个回调函数,可触发一个函数来更新状态…但是,我很难将对象内的键值作为目标。 我的初始状态如下: 我正在尝试锁定键,但不知道如何操作。我的函数传递了一个键,以便可以将数组中的索引作为目标,但是当我尝试执行以下操作时:由于意外的令牌,它会引发错误。 我曾尝试

  • 所以我在这方面做了一段时间,觉得最好重构我的代码,以便将状态设置为一个对象数组。我要做的是增加一个点击按钮的数字。 我在这里尝试过类似于这个线程的东西,但是我不断得到错误。 我可以编写什么样的函数来设置我想要目标的对象中的键的状态?

  • 假设我让玩家创建团队并创建团队调用团队类的新实例,该实例具有称为成员的数组列表。 现在在主课堂上,我如何在被邀请后将球员添加到团队中?我在team类中有一个addPlayer方法,只需将它们添加到arraylist中,但是如果teams类当前有多个实例(其他玩家创建了团队),它怎么知道要加入哪一个呢? 我在teamLeader的Teams类中有一个变量,在创建实例时设置该变量,如果这可以帮助我编辑

  • 问题内容: 我需要确定JavaScript中的数组中是否已存在对象。 例如(dummycode): 现在,“carBrands”数组包含所有实例。我现在正在寻找一种快速解决方案,以检查car1,car2,car3或car4的实例是否已经在carBrands数组中。 例如: car1和car4包含相同的数据,但是不同的实例,应测试它们是否相等。 我是否在创建时向对象添加了哈希值?还是有更快的方法来用

  • 如何从数组中只得到没有课程名称的分数: 这是我的测试课 这是我的分级课 现在,如果我调用一个方法:gradeList.getAllGrades(),它给我:[Physics 10,LT 4,Math 7],我需要的是:10,4,7

  • 问题内容: 我有以下JSON数组,我想创建对象表单状态键计数 要计算状态键值并创建以下对象 问题答案: 使用 方法 虽然可以使用 具有相同代码的方法。