首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用钩子更新数组React Native中一个对象的状态

如何使用钩子更新数组React Native中一个对象的状态
EN

Stack Overflow用户
提问于 2020-01-16 06:18:58
回答 2查看 546关注 0票数 0

我希望更新数组中一个对象的状态,而不是更新整个数组的状态。

代码语言:javascript
复制
const [users, setUsers] = useState;

const data = [
{ 
    id: 1,
    name: "John",
    activeAccount: 1 
},
{ 
    id: 2,
    name: "Mary",
    activeAccount: 1 
},
{ 
    id: 3,
    name: "Max",
    activeAccount: 1 
}
]

例如,John停用他的帐户,activeAccount的状态应该更新为0。所以只应该更新一个对象(他没有来自其他用户的数据,也不能更新所有的数组)--只是举个例子,为什么我使用这里的user.id

代码语言:javascript
复制
const index = users.findIndex(obj => obj.id === user.id); // find index of object
users[index].activeAccount = 0
setUsers(users) // Nothing updated

我还尝试使用Immutability Helper

代码语言:javascript
复制
import update from 'immutability-helper';

const index = users.findIndex(obj => obj.id === user.id); // find index of object
setUsers({
   users: update(...users, {index: {activeAccount: {$set: 0 }}})
})

有人能帮上忙吗?有解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2020-01-16 07:43:01

解决方案:

代码语言:javascript
复制
const index = users.findIndex(obj => obj.id === user.id);
setUsers([...users, users[index].activateAccount = 0])
票数 2
EN

Stack Overflow用户

发布于 2020-01-16 06:36:47

调用时可能出现问题

代码语言:javascript
复制
setUsers({
  users: update(...users, {index: {activeAccount: {$set: 0 }}})
})

如果您使用以下命令初始化状态:

代码语言:javascript
复制
const data = [
{ 
    id: 1,
    name: "John",
    activeAccount: 1 
},
{ 
    id: 2,
    name: "Mary",
    activeAccount: 1 
},
{ 
    id: 3,
    name: "Max",
    activeAccount: 1 
}
]

const [users, setUsers] = useState(data);

然后你需要调用不带object的setUsers:

代码语言:javascript
复制
setUsers(
  update(...users, {index: {activeAccount: {$set: 0 }}})
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59760373

复制
相关文章

相似问题

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