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

Reactでコンソール画面に二重に表示されてしまう

Last updated at Posted at 2025-05-11

はじめに

propsやstateの更新が無いはずなのに、コンソール表示が思っている数の2倍表示されてしまうので、なぜ?と思い調べた結果をまとめます。

問題

デバッグ用にconsole出力をしていたのですが、暗めの似たようなコンソール表示が二重に出てしまうエラーが起きました。

image.png

コンソールが表示される回数は、レンダリングされた回数になります。
stateの更新や親からのpropsの受け渡しで子のpropsが更新された場合などにレンダリングが再度走るはずですが、4回も更新した覚えはありません、、

解決方法

main.tsx内にある <StrictMode>タグ というのが原因でした。

main.tsx
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { ToDoApp } from "./ToDoApp";
import { ChakraProvider } from "@chakra-ui/react";

createRoot(document.getElementById("root")!).render(
  <StrictMode> // こいつが原因
  <ChakraProvider>
    <ToDoApp />
  </ChakraProvider>
  </StrictMode>,
);

<StrictMode>タグとは開発時のみに有効になるもので、本番環境では動作せず潜在的なバグを早期に発見するための開発ツールです。

そしてStrict Mode では、以下のような開発時専用の挙動が有効になります。

  • レンダーを追加で 1 回行います

  • エフェクトの実行を追加で 1 回行います

  • ref コールバックの実行を追加で 1 回行います

  • コンポーネントが非推奨の API を使用していないかチェックします

つまり、今回の場合は「レンダーが追加で1回行われていた」ということですね。
<StrictMode>タグをコメントアウトすると

image.png
二重表示が無くなりました!

おわりに

慣れるまでは、気にせずStrictModeを有効にする方が良さそうですね。

参考

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