작성
·
318
0
import { useCallback } from 'react';
import io from 'socket.io-client';
// 아무 key값이 들어올수 있으니 이런 형식으로 타입 지정
const sockets: {[key: string]: SocketIOClient.Socket} = {};
const backUrl = "http://localhost:3095";
const useSocket = (workspace?: string): [SocketIOClient.Socket | undefined, () => void] => {
const disconnect = useCallback(() => {
if(workspace) {
sockets[workspace].disconnect();
// 연결 끊을때는 지우기
delete sockets[workspace];
}
},[workspace])
if(!workspace) {
// 한번 맺었던 연결을 끊는 함수 (끝맺음을 잘하자)
return [undefined, disconnect];
}
sockets[workspace] = io.connect(`${backUrl}/ws-${workspace}`,{
transports: ['websocket'],
});
return [sockets[workspace], disconnect]
}
export default useSocket;
const [socket, disconnect ] = useSocket(workspace);
useEffect(()=>{
if(channelData && userData){
socket?.emit("login",{id : userData.id, channels: channelData.map((y)=> y.id)});
}
},[userData, channelData, socket]);
// socket연결을 끊어줄 때
useEffect(()=>{
return () => {
disconnect();
}
},[workspace, disconnect])
버전이 달라서 이런 현상이 생기는건지 잘 모르겠습니다. ..
감사합니다 덕분에 해결했습니다!!!