Skip to content

Instantly share code, notes, and snippets.

@SirensOfTitan
Created January 16, 2020 13:40
Show Gist options
  • Save SirensOfTitan/6067c1c1aa7912873615780ee519c74b to your computer and use it in GitHub Desktop.
Save SirensOfTitan/6067c1c1aa7912873615780ee519c74b to your computer and use it in GitHub Desktop.
export const useRoutePath = () => {
const router = useRouter();
const [path, setPath] = useState(router?.asPath);
const [loading, setLoading] = useState(false);
useEffect(() => {
const routeChangeStartFn = (newPath: string) => {
setLoading(true);
setPath(newPath);
};
const routeChangeErrorFn = (err: Error, newPath: string) => {
setLoading(false);
setPath(newPath);
};
const routeChangeCompleteFn = (newPath: string) => {
setLoading(false);
setPath(newPath);
};
router.events.on("routeChangeStart", routeChangeStartFn);
router.events.on("routeChangeComplete", routeChangeCompleteFn);
router.events.on("routeChangeError", routeChangeErrorFn);
return () => {
router.events.off("routeChangeStart", routeChangeStartFn);
router.events.off("routeChangeComplete", routeChangeCompleteFn);
router.events.off("routeChangeError", routeChangeErrorFn);
};
}, []);
return [path, loading];
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment