![](/img/trans.png)
[英]Uncaught TypeError: Cannot assign to read only property '1' of object '[object Array]'
[英]TypeError: Cannot assign to read only property 'x' of object '[object Array]'
我嘗試了很多方法來改變它,不管它是如何在其他 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);
}, [])
無論我是如上所示的 map 還是使用 for 循環,我總是會收到以下錯誤: TypeError: Cannot assign to read only property 'x' of object '[object Array]'
非常感謝任何建議/幫助。 提前致謝!
我看到代碼在 React 中使用,因此最好避免就地修改users
數組(例如使用.unshift()
或.splice()
),因為 React 不會看到差異並且不會重新渲染。
在 React 中,為之前的值創造新的價值是很常見的做法。
我認為您可以通過兩次過濾users
數組來實現目標(過濾方法創建一個副本而不影響原始數組):
primaryUser
變量中並結合這些 arrays:
useEffect(() => {
const primaryUserID = 12345;
const [ primaryUser ] = users.filter(user => user.id === primaryUserID)
setPrimaryUser(primaryUser);
// Construct array from 'primaryUser' and the rest of users
const newUsers = [
primaryUser,
...users.filter(user => user.id !== primaryUserID),
];
setUsers(newUsers);
}, [])
多虧了 VLAZ 和 Vitalii(很棒的文章),我才能夠讓它工作。 這是我的解決方案:
useEffect(() => {
let tempUsers = [...users];
tempUsers.map((user, i) => {
if(user.id === 12345) {
tempUsers.splice(i, 1);
tempUsers.unshift(user)
setPrimaryUser(user);
}
});
setUsers(tempUsers);
}, [])
謝謝你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.