useSearchParams() should be wrapped in a suspense boundary

Next.js14でuseSearchParams()を使うと以下のようなエラーが出ました。

 ✓ Linting and checking validity of types    
 ✓ Collecting page data    
   Generating static pages (0/12)  [    ]
 ⨯ useSearchParams() should be wrapped in a suspense boundary at page "/deposit". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout

Error occurred prerendering page "/multi-value-system". Read more: https://nextjs.org/docs/messages/prerender-error

 ✓ Generating static pages (12/12) 

> Export encountered errors on following paths:
        /(auth)/deposit/page: /deposit

このエラーの原因と解決方法を紹介します。

目次

原因: Suspenseで囲われていない

useSearchParams() が使われているページやコンポーネントがSuspenseで囲われていないため上記のエラーがでます。

SuspenseはReact18から実装された機能で、データ取得中ローディング状態の宣言的な記述を行います。

<Suspense> を使うことで、子要素が読み込みを完了するまでフォールバックを表示させることができます。

解決方法: layout.tsxでsuspenseを使ってPageを囲む

layout.tsxや親コンポーネントなどでSuspenseを使って囲む必要があります。

"use client";
import { useEffect, Suspense } from "react";
...

export default function Layout({
  children,
}: {
  children: React.ReactNode;
}) {
  ...

  return (
    <div>
      <Suspense fallback={<div>Loading...</div>}>
        <div className="flex-1 px-2">{children}</div>
      </Suspense>
    </div>
  );
}

参考

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次