微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未在reactJS挂钩中的存在状态列表变量中添加新项

如何解决未在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 举报,一经查实,本站将立刻删除。