【发布时间】:2020-11-12 21:33:24
【问题描述】:
我尝试了很多方式来改变这一点,无论它是如何完成/在其他 Stack Overflow 帖子中解释的。我有一个对象数组,我正在尝试通过数组映射/循环将其中一个对象移动到数组的前面。
这是我得到的:
const [users, setUsers] = useState<User[]>([]);
const [primaryUser, setPrimaryUser] = useState<User>({
id: 0;
first_name: "",
last_name: ""
})
useEffect(() => {
users.map((user, i) => {
if(user.id === 12345) {
users.splice(i, 1);
users.unshift(user)
setPrimaryUser(user);
}
});
setUsers(users);
}, [])
无论我是如上所示映射还是使用 for 循环,我总是会收到以下错误:TypeError: Cannot assign to read only property 'x' of object '[object Array]'
非常感谢任何建议/帮助。提前致谢!
【问题讨论】:
-
if(user.id = 12345)this is assignment, not equality。此外,您可能应该避免通过.splice()和.unshift()改变users。另外,作为旁注,请不要将.map用作简单的迭代。如果您不进行映射操作,请使用.forEach或简单的循环。 -
谢谢,我复制错了。我将其命名为
if(user.id === 12345) {。另外,我尝试了forEach和for循环。每次仍然出现相同的错误。 -
那么问题在于改变数组。你永远不应该直接用 React 改变状态,这正是你遇到的问题。
-
我什至尝试过复制状态 -
let tempUsers = users,对其进行变异,设置它 -setUsers(tempUsers),但还是一样。 -
let tempUsers = users将不会复制数组! Copy array by value
标签: arrays reactjs typescript react-hooks