尝试在useEffect函数中映射状态,但它会改变状态

时间:2019-08-04 15:39:45

标签: reactjs react-redux

我已经通过使用redux-thunk获得了用户列表,然后我将它们映射到StateProProps这些用户以使其进入我的道具。但是之后,当我尝试在props.users.users上进行映射时,它会更改我的状态(即即使我在该状态上使用了散布运算符,props.users.users也会更改)。请帮忙。

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

useEffect(() => {
    props.getUsers();
}, []);

useEffect(() => {
    let tempUsers = [...props.users.users];
    tempUsers = tempUsers.map(user => {
        user.created = new Date(parseInt(user.created) * 1000).toString()
        user.action = { ...user };
        return user;
    });
    setUsers(tempUsers);
}, [props.users.users]);

1 个答案:

答案 0 :(得分:0)

您仍在map中对用户对象进行突变。您正在直接设置user对象的属性,这些属性仍引用原始用户对象。您还应该创建user对象的新副本以设置其属性。

tempUsers = tempUsers.map(usr => {
   let user = { ...usr };
   user.created = new Date(parseInt(user.created) * 1000).toString()
   user.action = { ...user };
   return user;
});