【发布时间】:2020-08-31 19:13:47
【问题描述】:
目标:
我正在尝试通过 websocket 连接从服务器获取消息,并将它们添加到名为 outgoingMessages 的对象数组中。
问题:
在调用receive() 时,只有最新的消息会保存在outgoingMessages 中。
我怀疑发生这种情况是因为Websocket.onmessage 仅使用我调用connect() 时的outgoingMessages 的值。我已经尝试过很多次摆弄它,但我无法解决这个问题。
如何让receive() 使用当前状态,而不是初始状态?
提前致谢。
const Dashboard = () => {
const [incomingMessages, setIncomingMessages] = React.useState([]);
const ws = React.useRef(null);
const receive = (message) => {
setIncomingMessages([...incomingMessages, message]);
};
const connect = () => {
ws.current = new WebSocket(WS_URL + "mqtt/ws/messages");
ws.current.onopen = () => setWsConnected(true);
ws.current.onclose = () => setWsConnected(false);
ws.current.onmessage = (event) => receive(event);
};
return (<>Stuff</>)
}
【问题讨论】:
标签: reactjs websocket closures react-hooks react-state-management