Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FE] 네트워크 상태가 오프라인일 경우 토스트로 안내하는 기능 #568

Merged
merged 6 commits into from
Sep 21, 2024

Conversation

pakxe
Copy link
Contributor

@pakxe pakxe commented Sep 16, 2024

issue

구현 목적

네트워크 연결이 오프라인일 경우 현재는 아무 처리가 되어있지 않습니다. 따라서 오프라인일 때 네트워크 요청을 날리는 경우 무한 로딩이 발생하고 있는 상태인데요.

사용자에게 현재 네트워크 오프라인 상태임을 알리기 위해 오프라인 상태가 되면 토스트를 띄워주도록 합니다.

구현 내용

구현을 위해 필요한 과정은 다음과 같습니다.

  1. 네트워크 상태를 감지해 토스트를 띄우기 위한 컴포넌트 제작

  2. App.tsx에서 1번의 컴포넌트를 호출


  1. 네트워크 상태를 감지해 토스트를 띄우기 위한 컴포넌트 제작

네트워크 상태를 실시간으로 감지하기 위해 mdn문서에 나와있는 'offline', 'online'이벤트를 사용해보았습니다.

컴포넌트가 렌더링될 때 useEffect를 사용해 offline, online 이벤트에 콜백함수를 장착합니다.

컴포넌트가 사라질 때는 클린업 함수를 사용해 offline, online 이벤트에 장착했던 콜백을 제거합니다.

const addNetworkStateEventListener = () => {
    window.addEventListener('online', handleNetworkOnline);
    window.addEventListener('offline', handleNetworkOffline);
  };

  const removeNetworkStateEventListener = () => {
    window.removeEventListener('online', handleNetworkOnline);
    window.removeEventListener('offline', handleNetworkOffline);
  };

  useEffect(() => {
    addNetworkStateEventListener();

    return removeNetworkStateEventListener;
  }, []);

  1. App.tsx에서 1번의 컴포넌트를 호출
const App: React.FC = () => {
  return (
    <div>
       <NetworkStateCatcher /> // ⬅️ 여기!
       <Outlet />
    </div>
  );
};

구현 결과

2024-09-16.9.21.02.mov

@pakxe pakxe added 🖥️ FE Frontend ⚙️ feat feature labels Sep 16, 2024
@pakxe pakxe added this to the lev4 milestone Sep 16, 2024
@pakxe pakxe self-assigned this Sep 16, 2024
Copy link

Copy link
Contributor

@jinhokim98 jinhokim98 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네트워크 에러까지 신경 써준 디테일 너무 좋아요!
에러에 대해서 하나 더 짚어봐도 좋을 것 같은 내용이 있는데
에러가 터졌을 때 retry를 몇 회로 설정할 것인가!에 대해서도 논의해보면 좋을 것 같아요!

이러다 웨디 에러 처리의 장인, 마스터가 될 듯!!
(이런 웨디 꿀꺽한다면?ㅋㅋ)

return removeNetworkStateEventListener;
}, []);

return null;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 마지막에 null은 어떤 이유로 넣으신걸까요?

Copy link
Contributor

@soi-ha soi-ha left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

에러처리의 고수가 되어가는 웨-디

Copy link

Copy link

@jinhokim98 jinhokim98 merged commit 89ef7a0 into fe-dev Sep 21, 2024
2 checks passed
@jinhokim98 jinhokim98 deleted the feature/#562 branch September 21, 2024 12:14
@Todari Todari added this to the v2.0.0 milestone Sep 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: ✅ Done
Development

Successfully merging this pull request may close these issues.

4 participants