У меня есть функциональный компонент реагирования:
function Chat(props) {
const [messages, setMessages] = useState([]);
const inputRef = useRef();
//The socket is a module that exports the actual socket.io socket
socket.socket.on("chatMessage", (msg) => {
setMessages([...messages, msg]);
});
const inputChanged = (e) => {
if (e.key === "Enter") {
socket.sendMessage(inputRef.current.value)
.then(() => {
//do something
})
.catch(console.log);
inputRef.current.value = "";
}
};
return (
<div>
{messages.map((msg, i) => <ChatMessage key={i}>{msg}</ChatMessage>)}
<input ref={inputRef} onKeyPress={inputChanged} />
</div>
);
}
Но когда я обновляю состояние из socket.socket.on("chatMessage"
, я получаю ошибку
Невозможно выполнить реакцию обновление состояния на не смонтированном компоненте
И сокет сообщает мне, что на ответ ушло много времени, и начинает происходить некоторая рекурсивность.
Как мне go сообщить об обновлении состояния моего компонента из события сокета?