首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在React状态下更新对象

如何在React状态下更新对象
EN

Stack Overflow用户
提问于 2016-04-15 22:58:59
回答 5查看 8.9K关注 0票数 18

我在JS对象(不是数组)中有一个users的索引列表。它是React状态的一部分。

代码语言:javascript
复制
{
    1: { id: 1, name: "John" }
    2: { id: 2, name: "Jim" }
    3: { id: 3, name: "James" }
}

执行以下操作的最佳实践:

  1. 添加一个id为(4)的新用户{ id: 4,name:"Jane“}作为密钥
  2. 删除id为2的用户
  3. 将用户#2的名称更改为"Peter"

没有任何不可变的帮助器。我使用了Coffeescript和下划线(所以_.extend是可以的…)。

谢谢。

EN

回答 5

Stack Overflow用户

发布于 2016-04-15 23:07:29

这就是我要做的

依次添加:var newUsers = _.extend({}, users, { 4: { id: 4, ... } })

  • remove:

  • newUsers['2'].name = 'Peter'

var newUsers = _.extend({}, users)var newUsers = _.extend({}, users)

票数 9
EN

Stack Overflow用户

发布于 2016-04-15 23:08:47

如果您没有使用Flux,那么可以使用this.setState()来更新状态对象。

代码语言:javascript
复制
delUser(id) {
    const users = this.state.users;
    delete users[id];
    this.setState(users);
}

addChangeUser(id, name) {
    const users = this.state.users;
    users[id] = {id: id, name: name};
    this.setState(users);
}

然后,您可以使用以下代码执行测试用例:

代码语言:javascript
复制
addChangeUser(4, 'Jane);
addChangeUser(2, 'Peter');
delUser(2);
票数 5
EN

Stack Overflow用户

发布于 2016-05-02 19:33:19

除了_.extend之外,您还可以使用Map来存储user

代码语言:javascript
复制
let user = new Map();
user.set(4, { id: 4, name: "Jane" }); //adds with id (4) as key
user.myMap.set(2, { id: 2, name: "Peter" }); // set user #2 to "Peter"
user.delete(3); //deletes user with id 3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36650570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档