Update hooks

This commit is contained in:
DefectingCat
2022-06-28 10:05:49 +08:00
parent 54af3eb68f
commit 101288d12b
2 changed files with 43 additions and 30 deletions

View File

@ -0,0 +1,41 @@
import { useRouter } from 'next/router';
import { useState, useCallback, useEffect } from 'react';
/**
* Loading state when router changed.
* @returns
*/
const useRouterLoading = () => {
const router = useRouter();
const [loading, setLoading] = useState(false);
const handleStart = useCallback(
(url: string) => {
url !== router.pathname ? setLoading(true) : setLoading(false);
},
[router.pathname]
);
const handleComplete = useCallback(() => {
setLoading(false);
}, []);
useEffect(() => {
router.events.on('routeChangeStart', handleStart);
router.events.on('routeChangeComplete', handleComplete);
router.events.on('routeChangeError', handleComplete);
// If the component is unmounted, unsubscribe
// from the event with the `off` method:
return () => {
router.events.off('routeChangeStart', handleStart);
router.events.off('routeChangeComplete', handleComplete);
router.events.off('routeChangeError', handleComplete);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return { loading };
};
export default useRouterLoading;