我“有”套接字聊天了。
我的问题是:我希望每个用户有1个单一连接,所以:
const [socket, setSocket] = useState();
const initSocket = () => {
const socket = io(`${process.env.REACT_APP_BACKEND_DOMAIN}`, {forceNew:false, query: {idUser: props.user._id}})
console.log(socket)
socket.on('connect', ()=> console.log('conectado'));
setSocket(socket)
}
useEffect(()=>{
initSocket()
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
这是我的反应。如果我以初始值连接到io(
$ {process.env.REACT_APP_BACKEND_DOMAIN} , {forceNew:false, query: {idUser: props.user._id}})
,则将获得4个套接字连接!所以我在componentdidmount
中初始化了套接字。
问题是我该如何收听新消息?
当我将初始值放在Socket状态时,我没有遇到问题,因为在第一次使用useEffect时,我已设置了套接字。但是现在,我必须有条件地...
useEffect(()=>{
if(socket){
console.log('he entrado')
socket.on('isTyping', objeto => {
const {idChat, isTyping, idUser} = objeto;
})
socket.on('message', message => {
setMessages([...messages, message])
scrollToBottom();
})
}
})
现在,当我发送消息时,请不要输入useEffect,并且不出现(在第二个对话中):/
我该怎么做?