-
카테고리
-
세부 분야
모바일 앱 개발
-
해결 여부
미해결
socket의 emit에 관하여 질문있습니다!
24.01.22 16:24 작성 조회수 98
0
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 입니다.
답변을 작성해보세요.
0
jkl154527
질문자2024.01.22
선생님 코드를 복붙 해도 동일한 결과가 반복됩니다.
다른 해결 방법이 있을까요 ?
// 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];
};
jkl154527
질문자2024.01.22
백엔드 코드에서 이 부분이 문제가 아닐까 생각드는데 맞을까요 ? 해당 부분 주석처리하면 emit이 한 번만 갑니다!
id = setInterval(() => {
io.emit("hello", "emit");
}, 1000);
답변 1