socket의 emit에 관하여 질문있습니다!
237
작성한 질문수 3
socket.emit('login', 'hello') 해당 부분에서 emit을 계속 찍어내는 문제가 발생하고 있습니다!!
useEffect의 dependenciy의 의존성을 주입 안 하면 emit을 계속 안 찍는데 어떻게 하는게 맞을까요 ??
// 로그인 후 emit을 계속 보낸다.
useEffect(() => {
const helloCallback = (data: any) => {
console.log(data);
};
if (socket && isLoggedIn) {
socket.emit('login', 'hello');
socket.on('hello', helloCallback);
}
return () => {
if (socket) socket.off('hello', helloCallback);
};
}, [isLoggedIn, socket]);
// 로그인 후 한 번만 emit을 보낸다.
useEffect(() => {
const helloCallback = (data: any) => {
console.log(data);
};
if (socket && isLoggedIn) {
socket.emit('login', 'hello');
socket.on('hello', helloCallback);
}
return () => {
if (socket) socket.off('hello', helloCallback);
};
}, []);
아래는 emit을 계속 보내는 log 입니다.
답변 1
0
socket과 isLoggedIn을 콘솔로 찍어보세요. 이 둘의 값이 자꾸 바뀌는 것 같습니다.
0
선생님 코드를 복붙 해도 동일한 결과가 반복됩니다.
다른 해결 방법이 있을까요 ?
// AppInner
const AppInner = () => {
const isLoggedIn = useSelector((state: RootStateType) => !!state.user.email);
const [socket, disconnect] = useSocket();
useEffect(() => {
const helloCallback = (data: any) => {
console.log(data);
};
if (socket && isLoggedIn) {
socket.emit('login', 'hello');
socket.on('hello', helloCallback);
}
return () => {
if (socket) {
socket.off('hello', helloCallback);
}
};
}, [isLoggedIn, socket]);
useEffect(() => {
if (!isLoggedIn) disconnect();
}, [disconnect, isLoggedIn]);
return (
<NavigationContainer>
{isLoggedIn ? (
<Tab.Navigator>
<Tab.Screen name="Orders" component={Orders} options={{ title: '오더 목록' }} />
<Tab.Screen name="Delivery" component={Delivery} options={{ headerShown: false }} />
<Tab.Screen name="Settings" component={Settings} options={{ title: '내 정보' }} />
</Tab.Navigator>
) : (
<Stack.Navigator>
<Stack.Screen name="SignIn" component={SignIn} options={{ title: '로그인' }} />
<Stack.Screen name="SignUp" component={SignUp} options={{ title: '회원가입' }} />
</Stack.Navigator>
)}
</NavigationContainer>
);
};
// useSocket
const useSocket = (): useSocketReturnType => {
const disconnect = useCallback(() => {
if (socket) {
socket.disconnect();
socket = undefined;
}
}, []);
if (!socket) {
socket = SocketIOClient(Config.API_URL as string, {
transports: ['websocket']
});
}
return [socket, disconnect];
};
0
백엔드 코드에서 이 부분이 문제가 아닐까 생각드는데 맞을까요 ? 해당 부분 주석처리하면 emit이 한 번만 갑니다!
id = setInterval(() => {
io.emit("hello", "emit");
}, 1000);
앱실행시 네이버맵 [401] 에러
0
955
2
스타일링 라이브러리
0
146
2
expo, cli 선택 중에 고민이 있습니다.
0
167
2
JDK 버전이 달라도 괜찮나요?
0
223
2
dimenstion usewindowdeminstion
0
120
3
[맥 전용]환경 설정하기 1편 & [맥 전용]환경 설정하기 2편의 영상이 안나옵니다.
0
209
1
jdk11 버전과 gradle 버전의 호환성 관련 질문드립니다.
0
398
2
강의 외 질문입니다!
0
157
2
react native랑 맞는 ui 라이브러리 어떤게 좋을까요?
0
1485
2
react native와 spring boot 연결
0
353
1
java가 아닌 .kt에서 code push 에러가 발생합니다.
0
210
2
flipper 239 에러가 발생합니다.
0
162
2
package.json에 /lib/panino.js 문제입니다.
0
464
2
window - mac 협업 과정 질문합니다
0
214
1
ios 빌드 중 RCTBridgeDelegate.h import 오류
0
289
2
ios 앱 빌드 중 hermesEnabled 관련 오류발생
0
238
2
Socket 연결시 질문 드립니다.!
0
151
2
wifi 환경에서 axios 통신이 로컬서버에서 안됩니다.
0
425
2
iOS render error 질문드립니다.
0
410
2
iOS 가상머신 오류
0
164
2
npc react init 명령어 실행시 발생되는 오류
0
220
1
nom start 시 오류
0
116
1
NextJS 기반으로 만들어서 웹뷰 React Native로 배포 가능한가요?
0
994
2
안드로이드 rn75 버전에 맞게 설정 중에 android13 다운로드에 대해서 막혔습니다!
0
183
2





