【发布时间】:2021-12-14 09:24:55
【问题描述】:
目前我有以下代码:
export default function Chat() {
const [chat, setChat] = useState({ ID: 0, messages: [] })
const {socket} = useContext(SocketContext)
useEffect(() => {
socket.on('/chat', (message) => {
setChat({...chat, messages: [...chat.messages, message] }
//Some other interaction with variables inside this Chat function (eg: document.getElementById)
}
}, [])
return <div>{chat.toDivs()}</div>
}
但这并没有按预期工作,因为 useEffect 总是使用相同的 chat 值。因此,在 /chat 上接收消息的结果将始终是 [message] 而不是 [...prevMessages, message]。
我搜索过这个问题,有人建议使用 componentDidMount(),但是由于我没有使用 React.Component 可扩展类,所以我不能使用该方法。
有什么好的,简单的解决方案吗?
【问题讨论】:
标签: socket.io react-hooks