Используя каналы django с вебсокетами (React + django), я получаю ошибку при отправке сообщения изнутри useEffect в react
Ошибка заключается в том, что websocket все еще находится на стадии подключения. Вот сообщение об ошибке в консоли
Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
at websocket__WEBPACK_IMPORTED_MODULE_1__.client.onmessage
Это код внутри эффекта использования:
useEffect(() => {
websocket.onmessage = (e) => {
const dataReceived = JSON.parse(e.data)
}
if(dataReceived['Message'] == 'Hello'){
websocket.send(JSON.stringify({
State: 'Message Hello Received',
toSendBack: 'Hi',
}))
}
},[]}
Как вы видите, я использую условие if для проверки того, что если сообщение, отправленное с бэкенда, является 'Hello', я отправляю сообщение изнутри use effect в react, которое говорит 'hi'.
вот подход, который я использовал раньше:
const [chatSocket, setChatSocket] = useState(false)
useEffect(() => {
if (!chatSocket) {
newChatSocket()
}
}, [])
const newChatSocket = () => {
setChatSocket(new WebSocket(
'websocket_url'
))
}
if (chatSocket) {
chatSocket.onmessage = function (e) {
// do something
};
chatSocket.onclose = function (e) {
console.error('Chat socket closed unexpectedly');
};
}