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

useEffectが2回実行される

Last updated at Posted at 2025-02-12

エラー内容

useEffect を使用してエラー時の表示を実装したところ、エラーの警告が2回表示された
スクリーンショット 2025-02-06 17.36.58.png

環境

・React: 18.3.1
・chakra ui: 2.10.5
・axios: 1.7.9

原因

React18のStrictModeによって2回実行されることが原因

StrictModeを削除する(非推奨)

StrictModeを削除すれば2回実行されなくなるので原因はこれだが、
本番環境でのバグ検出に役立つため 削除は推奨しない

createRoot(document.getElementById("root")!).render(
-  <StrictMode>
     <App />
-  </StrictMode>
);

useEffect の依存配列を指定する(未解決)

依存配列を指定すると 1回だけ実行されるとあったので試したが、解決しなかった

useEffect(() => getUsers(), [getUsers]);

注意
getUsersuseCallback でメモ化されていることを確認する
していない場合はレンダリングのたびに useEffect が発火する可能性がある

参考

useRef を使う(解決策)

useRefを使い、初回のみ実行されるようにすることで解決した

  const connectionRef = useRef(false);
  useEffect(() => {
    if (!connectionRef.current) {
      getUsers();
      connectionRef.current = true;
    }
  }, []);

解決策は正しいのか?

useRefで 2回の実行を防ぐことで解決したが、これが正しい解決策なのかを考えてみると、少し自信がない。
もっと良い方法があるのではと思うので、今後より良い方法を見つけたら改善したい

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