Replies: 4 comments
-
|
역싀,,, 대장님,,, 소켓까지 마스터하셨군여,,, 사실 제 첫 프로젝트도 살짝 소켓이 가미된 프로젝트였습니다 ㅋㅋㅋ // socket.js
import io from 'socket.io-client';
export default io('localhost:3001', { reconnection: true });하나의 소켓 연결을 만든 후에 다른 곳에서 지금 곰곰히 생각해봤을 때 저라면 커스텀 훅을 하나 만들 것 같아요 const useSocket = (url: string) => {
const [socket, setSocket] = useState<Socket | null>(null);
useEffect(() => {
const newSocket = io(url);
setSocket(newSocket);
return () => {
newSocket.close();
};
}, [url]);
return socket;
};뭐 좀 더 확장해서 Context API랑 연결짓거나 상태 라이브러리 (Recoil, Zustand)랑 연결짓기도 편할 거 같네요! 두 번째 코드는 뭔가 소켓에서 내용을 받았을 때 |
Beta Was this translation helpful? Give feedback.
-
|
3년 전부터 WebSocket을 섭렵하고 계셨다니 역시 대장님이십니다.. 👍👍
저도 이전에 새로운 컨텐츠가 생길 때 스크롤을 하단으로 이동시키기 위한 기능을 구현해야 했던 적이 있는데, 유민님과 비슷한 방식으로 구현했던 것 같네요! (ref 객체로 화면 하단의 DOM을 등록하고, 스크롤을 하단으로 이동시키는 API 사용) const useScrollController = () => {
const target = useRef(null);
const scrollToBottom = () => {
queueMicrotask(() => {
target.current?.scrollTo({
top: target.current.scrollHeight,
});
);
return { target, scrollToBottom };
}; |
Beta Was this translation helpful? Give feedback.
-
|
대 유 민.. 저도 websocket으로 다양한 프로젝트 해봤는데 참고가 되는 코드가 많군요!! 일단은 컴포넌트와 비즈니스 로직을 분리하는게 좋다고 생각합니다!! 재한남의 의견처럼 custom hook으로 나눈다면 재사용성면에서도 더 좋을수 있다고 생각합니다! ->( 웹소켓의 연결과 헤제, 데이터가 오는 부분 그리고 메세지가 오는 부분 ) useEffect(function fetchChats async () {
try {
const chats = (await ChatList(room_id)).data.chatInfo;
// console.log(chats);
setChats(chats);
} catch (error) {
console.log(error);
}
}, []);요 부분도 저번에 재한님의 코드에 있던 것처럼 useEffect에 바로 함수를 사용해면 디버깅에도 좋다고 생각합니당!! |
Beta Was this translation helpful? Give feedback.
-
|
저도 이전에 과제를 진행할 때 소켓을 사용해보았는데, 당시에 저도 웹소켓 로직을 훅으로 분리해서 사용했던 기억이 납니다. 당시 기억을 좀 떠올려보자면 에러 핸들링을 할 때에 socket도
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
서비스 설명
React와 socket.io 를 사용하여 실시간 채팅 서비스를 만들었습니다.
git : https://github.com/OranguTalk/OranguTalk_FE
코드 설명
논의점
코드 설명
논의점
Beta Was this translation helpful? Give feedback.
All reactions