2
1

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.

Rechart を Next.js で使うと「Warning: Prop id did not match. Server:」 が発生

Posted at

結論

回避する一つの方法は、コンポーネントをサーバーレンダリングしないことです。
Screen Shot 2022-04-07 at 22.45.55.png

default export で Rechart のコンポーネントを使用している場合

const MyChart = () => {
  return (
    <BarChart data={data}>
      <XAxis type="number" />
      <YAxis dataKey="name" />
      <Bar dataKey="name" stackId="hogeId" fill={"red"} />
    </BarChart>
  );
};
export default MyChart;
import dynamic from "next/dynamic";
const DynamicMyChart = dynamic(() => import("./MyChart"), { ssr: false });

named export の場合

export const MyChart = () => {
  return (
    <BarChart data={data}>
      <XAxis type="number" />
      <YAxis dataKey="name" />
      <Bar dataKey="name" stackId="hogeId" fill={"red"} />
    </BarChart>
  );
};
import dynamic from "next/dynamic";

const DynamicMyChart = dynamic<Record<string, unknown>>(
  () => import("./MyChart").then((module) => module.MyChart),
  { ssr: false }
);

解説

「Warning: Prop id did not match. Server:」

これは Next.js の一般的な警告です。
クライアントの DOM とサーバーでレンダリングされた DOM が正確に一致しない場合に発生します。この場合、recharts の ID がクライアント側で異なるために表示されます。

dynamic import を利用すると非同期で import 処理ができます。

dynamic メソッドの SSR 回避のオプションを付与することでこのエラーを回避しています。SSR 回避とは、通常はサーバサイドで実行される制御をクライアントサイドで処理させてしまうことです。

余談 dynamic の他の使い方など

ローダーとパフォーマンス改善に使える

ダイナミックコンポーネントのロード中にローディング状態をレンダリングすることができます。
また動的にインポートすることで初回レンダリングの量を削減し、ページロードの読み込み時間を削減することができます。

const DynamicMyChart = dynamic<Record<string, unknown>>(
  () => import("./MyChart").then((module) => module.MyChart),
  { ssr: false, loading: () => <p>Loading...</p> }
);

Github の Issue:
Prop id did not match between server and client

Next.js 公式サイト:
Dynamic Import

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?