🌊

Reactのコンポーネントが2回呼び出される問題の対処法

2023/03/11に公開約1,000字

結論

ReactのStrictModeが2回レンダリングするから。

StrictModeはデフォルトで読み込まれている

create-react-appで作成したReactのindex.tsxに<React.StrictMode>がデフォルトで読み込まれています。

index.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

StrictMode とは?

意図しない副作用の検出のために、Appコンポーネントを2回呼び出しているそうです。

StrictMode はアプリケーションの潜在的な問題点を洗い出すためのツールです。Fragment と同様に、StrictMode は目に見える UI を描画しません。StrictMode の子孫要素に対しては、付加的な検査および警告が動くようになります。
引用元:日本語版React公式サイト

解決方法

基本的にはマウントがやりなおされても問題なく作成するべきではありますが、この挙動によってアプリケーションの正常な挙動が確認できない場合には、<StriceMode />をコメントアウトしましょう。

Discussion

ログインするとコメントできます