Wy状态在另一个状态下没有更新,我不知道如何解决这个问题
我想用Socket做一个多人纸牌游戏。但是我遇到了这个问题。当selectColor状态改变时,它不会在其他状态中更新。每当我点击组件时,我都试图打印状态,但状态与初始状态相同。有人知道怎么解吗?
感谢const [cards, setCards] = useState([]);
const [id, setId] = useState();
const [color, setColor] = useState("?");
const [selectColor, setSelectColor] = useState(false);
useEffect(() => {
socket.on("id", (id) => setId(id));
socket.on("forceDisconnect", () => setId("Full"));
socket.on("cards", (data) => {
setKarten([
data.map((element) => {
return (
<div
onClick={() =>
console.log(selectColor)
}
key={element}
>
<Card card={element} />
</div>
);
}),
]);
});
socket.on("selectColor", () => {
setSelectColor(true);
console.log("selectColor");
});
}, []);
您已经创建了一个闭包,并在执行socket.on("cards", etc. )
回调时将selectColor
的值放在其中(因此'冻结在时间中')。
在数据到达时创建react元素并将它们存储在状态中是不好的。你应该在渲染函数被调用时创建它们。像这样:
socket.on("cards", (data) => setCards(data));
return (
<>
{ cards.map(
card => (
<div onClick={() => console.log(selectColor)} key={card}>
<Card card={card} />
</div>
)
)}
</>
);