这是我的简单反应组件: `const PlayersOnline = () => { const 套接字 = useSocket();
const [onlinePlayers, setOnlinePlayers] = useState(1);
socket.on("online_players", (data) => {
console.log("data coming ----", data);
setOnlinePlayers(() => {
console.log("state----", data);
return data;
});
});
return (
<div className="playersOnline">
<p>Online: {onlinePlayers}</p>
</div>
);
};`
正在使用整个组件的上下文来创建和使用套接字实例。我还放下了两个控制台,一个在“online_players”回调中,另一个在返回数据之前。 套接字连接没有问题,它在第一次渲染时更新状态没有任何问题,但是当我转到未使用该组件的另一个页面并返回到此时,套接字事件触发,我可以看到日志“数据即将到来 --- " 带有值,但之后 setState 代码不会执行。有人可以指出此问题的修复方法,为什么它无法执行整个代码,它不会给出任何错误。
我还使用了 useEffect 方法,但这让事情变得更糟,因为它甚至不让套接字事件触发。
我的错。我从服务器以错误的顺序发送了两个事件,调整该顺序修复了它。
现在已经解决了。
但我仍然想知道为什么代码到达第一个 console.log 行而不执行下一行而没有任何中断或任何错误。