728x90
반응형

요즘 계속 안드로이드 요구사항을 작업하다가, 오랜만에 react 로 된 웹페이지 요구사항이 들어왔다.

 

소켓 연결에 상태에 따른 버튼 추가 및 재연결 요청사항이었는데

 

오랜만에 리액트 코드를 보게되서 설렜다.

 

기본 원리는 redux 에 socket connected state 값을 하나 추가해주고, dispatch 를 통해 값을 바꿔주는 식으로 적용했다.

 

useDispatch  훅을 분리된 소켓 모듈에서 바로 import 해줘서 쓰지 못하기때문에,

 

App.tsx 에서

export const socektConnectedRef = React.createRef();

선언 후, App.tsx에서 ref값을 하나

socektConnectedRef.current =(connected)=>{ dispatch(setSocketConnected({ socketConnected: connected}));}

함수를 선언해주고

 

해당 소켓 모듈에서 

function error_handler(err) {
insert_system_message('error', 'socket.io error : ' + err.toString());
console.log('fnChat.js > socket.io error > err = ', err);
try {
socektConnectedRef?.current(false);
} catch (error) {
console.log("socektConnectedRef error :::",error);
}
}

이런식으로 사용해주었다.

 

리넥으로 앱을 할때는 ref값을 많이 사용하지 않도록 지양했고, 전역으로 쓰는 ref값을 맥시멈 4~5개로 제한했었는데, 

 

지금 웹뷰에 붙어있는 웹에선 전역 ref값을 하나만 사용중이라 이런식으로 처리했다.

 

당연히 소켓 연결상태에 따른 뷰변화는

 

const socketConnected = useSelector((state) => state.langData.socketConnected);

을 통해 적용했다.

 

안드로이드를 하면서 많이 느끼는거지만, js 가 좋다.

728x90
반응형

+ Recent posts