useEffect 훅을 사용한 loading 상태 관리 이벤트 등록
mount 해제시 등록한 이벤트 해제
const useLoadingIndicator = () => {
const [isLoading, setIsLoading] = useState(false);
const start = () => {
setIsLoading(true);
};
const end = () => {
setIsLoading(false);
};
useEffect(() => {
Router.events.on('routeChangeStart', start);
Router.events.on('routeChangeComplete', end);
Router.events.on('routeChangeError', end);
return () => {
Router.events.off('routeChangeStart', start);
Router.events.off('routeChangeComplete', end);
Router.events.off('routeChangeError', end);
};
}, []);
return isLoading;
};
최상위 컴포넌트에 설정
_app.tsx
function MyApp({ Component, pageProps }: AppProps) {
const isLoading = useLoadingIndicator();
return (
<>
{isLoading && (
<Spinner />
)}
<Component {...pageProps} />
</>
);
}