如何解决未在reactJS挂钩中的存在状态列表变量中添加新项
我正在使用ReactJs Hooks,我有两个状态数组变量,其中一个包含我正在按布尔值过滤的项目列表,并且想添加到另一个状态数组变量中,我尝试了许多不工作的方式,仅添加最后一个项目仅使用arr.Push()循环的循环
- arr.concat()
- setlstRolePageMapping([... lstRolePageMapping,arr);
- arr.push()
k
以下代码不起作用
const handleAdd = () => {
let arr = [];
for (let data of lstPage) {
if (data.Select) {
objRolePage.Flag = "INSERT" ;
objRolePage.RoleId = 2 ;
objRolePage.PageId = data.PageId;
objRolePage.UpdatedBy = 775 ;
arr.push(objRolePage);
}
}
console.log(JSON.stringify(arr));
}
解决方法
也将ES用于第二个数组(第12行)
1. let arr = [];
2. for ( let data of lstPage) {
3. if (data.Select) {
4. objRolePage.Flag = "INSERT" ;
5. objRolePage.RoleId =2 ;
6. objRolePage.PageId = data.PageId;
7. objRolePage.UpdatedBy = 775 ;
8. arr.push(objRolePage);
9. }
10. }
11. setlstRolePageMapping([...lstRolePageMapping,...arr]); // <=== new line
12. console.log(JSON.stringify(arr));
,
这里的问题是,您为每次循环运行(objRolePage
)重用同一对象。将其推送到数组不会复制该副本,因此最终会推送同一对象,然后在下一次循环运行中对其进行修改。
您可以通过在每次循环运行时重置objRolePage
来解决该问题,例如:
let arr = [];
for (let data of lstPage) {
if (data.Select) {
const objRolePage = {
Flag: 'INSERT',RoleId: 2,PageId: data.PageId,UpdatedBy: 775,};
arr.push(objRolePage);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。