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?

More than 1 year has passed since last update.

Next.js - エラーハンドリングをカスタマイズする方法

Posted at

イントロダクション

Next.jsでは、クライアントサイドのエラーハンドリングをカスタマイズすることができます。例えば、デフォルトのエラーメッセージの代わりに、独自のエラーページを作成することができます。このブログは、このカスタマイズ方法について説明します。

_error.jsを使用したカスタマイズ

エラーハンドリングをカスタマイズするために、pagesフォルダ配下に_error.jsを使用します。このファイルを、あなたのアプリケーションのルートディレクトリのpagesフォルダ内に配置します。次に、このファイルに、独自のエラーメッセージを追加します。

以下は、カスタムエラーページを作成する例です。

// pages/_error.js

import React from 'react'

function Error({ statusCode }) {
  return (
    <p>
      {statusCode
        ? `An error ${statusCode} occurred on server`
        : 'An error occurred on client'}
    </p>
  )
}

Error.getInitialProps = ({ res, err }) => {
  const statusCode = res ? res.statusCode : err ? err.statusCode : 404
  return { statusCode }
}

export default Error

この例では、サーバーサイドでエラーが発生した場合は、そのHTTPステータスコードを表示し、クライアントサイドでエラーが発生した場合は、「An error occurred on client」と表示します。

しかし、これは単なる例であり、アプリケーションのデザインに合わせて、エラーページを自由にカスタマイズすることが可能です。

エラーページの設定方法

カスタムエラーページを作成するために、まず、アプリケーションのルートディレクトリに_error.jsという名前のファイルを作成します。このファイル内には、独自のエラーメッセージを書き込みます。

次に、エラーが発生した際に、このエラーページを表示するように設定します。エラーが発生した場合、Next.jsは自動的に_error.jsを探します。そして、このファイルが見つかった場合、そのファイルの内容を表示します。

エラーハンドリングの例

以下は、カスタムエラーページを使用したエラーハンドリングの例です。この例では、エラーが発生した場合に、独自のエラーページが表示されます。

// pages/_error.js

function ErrorPage({ statusCode, errorMessage }: Props) {
  // 直前のページ
  const handleBack = () => {
    Router.back()
  }
  // トップページ
  const handleHome = () => {
    Router.push('/')
  }

  if (statusCode) {
    return (
      <div>
        <span type='header2'>{statusCode} Not Found</span>
        <p>{errorMessage}</p>
        <div>
          <div>
            <button label={'前のページに戻る'} onClick={handleBack} />
          </div>
          <div>
            <button label={'トップ'} onClick={handleHome} />
          </div>
        </div>
      </div>
    )
  }

  return (
    <div>
      <div>
        <span>{statusCode} Not Found</Span>
      </div>
      <Paragraph>{errorMessage}</Paragraph>
      <div>
        <div>
          <button label={'前のページに戻る'} onClick={handleBack} />
        </div>
        <div>
          <button label={'トップ'} onClick={handleHome} />
        </div>
      </div>
    </div>
  )
}

ErrorPage.getInitialProps = ({ res, err }: NextPageContext) => {
  const statusCode = res ? res.statusCode : err ? err.statusCode : 404
  const errorMessage = err ? err.message : 'お探しのページは見つかりませんでした。'

  return { statusCode, errorMessage }
}

export default ErrorPage

この例では、ユーザーが存在しないページにアクセスするなどのエラーが発生した際、ステータスコードとエラーメッセージを表示します。また、「前のページに戻る」ボタンと「トップ」ボタンで、ユーザーが他のページに容易に移動できるようにしています。**getInitialProps**関数で初期化されます。

結論

Next.jsを使用すると、クライアントサイドのエラーハンドリングをカスタマイズすることができます。_error.jsページを作成することで、独自のエラーページを作成し、アプリケーションのデザインに合わせてカスタマイズすることが可能です。

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?