Repository navigation
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)랑 연결짓기도 편할 거 같네요! 두 번째 코드는 뭔가 소켓에서 내용을 받았을 때 |
|
3년 전부터 WebSocket을 섭렵하고 계셨다니 역시 대장님이십니다.. 👍👍
저도 이전에 새로운 컨텐츠가 생길 때 스크롤을 하단으로 이동시키기 위한 기능을 구현해야 했던 적이 있는데, 유민님과 비슷한 방식으로 구현했던 것 같네요! (ref 객체로 화면 하단의 DOM을 등록하고, 스크롤을 하단으로 이동시키는 API 사용) const useScrollController = () => {
const target = useRef(null);
const scrollToBottom = () => {
queueMicrotask(() => {
target.current?.scrollTo({
top: target.current.scrollHeight,
});
);
return { target, scrollToBottom };
}; |
|
대 유 민.. 저도 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에 바로 함수를 사용해면 디버깅에도 좋다고 생각합니당!! |
|
저도 이전에 과제를 진행할 때 소켓을 사용해보았는데, 당시에 저도 웹소켓 로직을 훅으로 분리해서 사용했던 기억이 납니다. 당시 기억을 좀 떠올려보자면 에러 핸들링을 할 때에 socket도
|
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
코드 설명
논의점
코드 설명
논의점
All reactions