0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NEXTJS ④Next.jsで画面遷移時プログレスバー(NProgressの紹介)

Posted at

NProgressは、Webアプリケーションにプログレスバーを簡単に追加できる軽量のJavaScriptライブラリです。Zennなどのサイトでよく使われています。NProgressを使用するための基本的な手順は以下の通りです。

1. NProgressのインストール

まず、NProgressをプロジェクトにインストールします。npmを使用してインストールする場合は以下のコマンドを使用します。

npm install nprogress

2. CSSのインポート

NProgressにはプログレスバーのスタイルを定義するCSSファイルがあります。これをインポートする必要があります。

import 'nprogress/nprogress.css';

3. JavaScriptのインポートと設定

NProgressを使用するJavaScriptファイルに以下のコードを追加します。

import NProgress from 'nprogress';

// プログレスバーの開始
NProgress.start();

// プログレスバーの終了
NProgress.done();

4. プログレスバーのカスタマイズ (オプション)

NProgressはカスタマイズ可能です。例えば、プログレスバーの速度やカラーを変更することができます。

NProgress.configure({ showSpinner: false }); // スピナーを非表示にする
NProgress.configure({ speed: 500 }); // プログレスバーの速度を変更する

これで、基本的な設定は完了です。特定のイベントやHTTPリクエストの際にプログレスバーを表示させたい場合は、そのイベントの開始時にNProgress.start()を呼び出し、終了時にNProgress.done()を呼び出すことで実現できます。

例: Axiosとの連携

例えば、HTTPリクエストライブラリのAxiosと組み合わせる場合は以下のようにします。

import NProgress from 'nprogress';
import 'nprogress/nprogress.css';

axios.interceptors.request.use(config => {
  NProgress.start();
  return config;
});

axios.interceptors.response.use(response => {
  NProgress.done();
  return response;
}, error => {
  NProgress.done();
  return Promise.reject(error);
});

NEXTJS hooks の作成 プログレスバーを表示させる

ページ遷移時にプログレスバーを表示させる hooks を作成します。

Next.js の useRouter でページ遷移時のイベントを取得できるので、イベントごとにプログレスバーの表示/非表示を切り替えます。

プログレスバーの制御は NProgress.start() と NProgress.done() を実行するだけです。

import 'nprogress/nprogress.css'

import { useRouter } from 'next/router'
import NProgress from 'nprogress'
import { useEffect } from 'react'

export const useProgressBarAtTransition = (): void => {
  const router = useRouter()

  useEffect(() => {
    const handleStart = () => {
      NProgress.start()
    }

    const handleStop = () => {
      NProgress.done()
    }

    router.events.on('routeChangeStart', handleStart)
    router.events.on('routeChangeComplete', handleStop)
    router.events.on('routeChangeError', handleStop)

    return () => {
      router.events.off('routeChangeStart', handleStart)
      router.events.off('routeChangeComplete', handleStop)
      router.events.off('routeChangeError', handleStop)
    }
  }, [router])
}

スタイルを修正する 自分のcustomer styleを作成

スタイルはライブラリデフォルトのものを指定していましたが、プログレスバーの色などを変更したい場合は css を修正します。

まずは、公式の css をプロジェクトに作成するので、 Github からコピーしてきます。
https://github.com/rstacruz/nprogress/blob/master/nprogress.css
変更したら _app.tsx でcssをインポートします。

import '../../styles/nprogress.css'

// ..省略..
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?