ytakeuchi.jp

ローディング状態を管理するカスタムフック

React.js

ローディング画面を実装する機会があったので、ローディングの状態を管理するカスタムフックのメモ…

import { useState, useEffect } from 'react';
import { useRouter } from 'next/router';
 
export const useLoading = () => {
    const [loading, setLoading] = useState(false);
    const Router = useRouter();
 
    useEffect(() => {
        const handleRouteChangeStart = () => setLoading(true);
        const handleRouteChangeComplete = () => setLoading(false);
 
        Router.events.on('routeChangeStart', handleRouteChangeStart);
        Router.events.on('routeChangeComplete', handleRouteChangeComplete);
        Router.events.on('routeChangeError', handleRouteChangeComplete);
 
        return () => {
            Router.events.off('routeChangeStart', handleRouteChangeStart);
            Router.events.off('routeChangeComplete', handleRouteChangeComplete);
            Router.events.off('routeChangeError', handleRouteChangeComplete);
        };
    }, [Router]);
 
    return loading;
};

ytakeuchi

2016年からフロントエンド領域を中心にフリーランスとして活動中。座右の銘は「昨日よりも楽に」好きな言葉は「効率化」こんな性格なので最近はAIツールばかり触っています。