为什么反应中的状态钩子会改变对象的所有元素?

Why the state hook in react changes all elements of the object?

我有一个成员列表,每个成员都有相同的应用程序集。我创建了 2 类 来关联每个成员和应用程序,最后得到了我在初始状态下编写的成员和应用程序的一般列表。 然后,使用该函数,我获得了被单击的成员的 ID,并且我想将其特定应用程序的状态从 false 更改为 true。但是我将应用程序的状态从 false 更改为适用于所有成员。为什么会这样,哪里会出错???

列出成员

let teamMembers = [
{ 'idMember': 0, 'name': 'John Littel', 'email': 'Delores_Barrows5@hotmail.com' },
{ 'idMember': 1, 'name': 'Tom Hamill', 'email': 'Luigi0@gmail.com' },
{ 'idMember': 2, 'name': 'Ann Quitzonl', 'email': 'AnnQ@hotmail.com' },
{ 'idMember': 3, 'name': 'Frances Schuster', 'email': 'Frances.Schuster@yahoo.com' },
{ 'idMember': 4, 'name': 'Morrison Mohr', 'email': 'Rafael.Hilll64@yahoo.com' }

];

列出应用程序:

let appsFromBase = ['App 0', 'App 1', 'App 2', 'App 3', 'App 4'];

class Application {
constructor(idApp, isSelected, appName) {
    this.idApp = idApp;
    this.isSelected = isSelected;
    this.appName = appName;
}

toggleSelected() { *this method changed apps from false => true*
    this.isSelected = !this.isSelected
}

};

const apps = appsFromBase.map((app, i) => new Application(i, false, app));
const membersObject = teamMembers.map((member, i) => new Member(i, member.name, member.email, apps));

状态:

const [members, setMembers] = useState(membersObject);

处理方法:

    const handleChoosenApp = (app, member_i) => {
    let newMembers = { ...members };

    let _id = app.idApp;

    if (_id !== 'btn-all-app') {
        let myUpdatingMember = newMembers[member_i].apps[_id].toggleSelected()

        setMembers({ ...newMembers });
    }

}

member_i, _id - 这是会员的ID和他的申请,是从界面点击的,他需要把值从true改成false 在控制台 myUpdatingMember 我得到了我需要的成员和应用程序,但是为什么每个人的状态都改变了???

所选状态是应用程序的 属性,而不是成员。

您创建一个 Application 数组并将其传递给每个 Member 构造函数。

您创建的每个 Member 对象共享同一个 Application 数组。