✍️

Reactのコンポーネントがなんか2回呼ばれているなと思ったら。

2022/06/13に公開

結論

strictモードの時には、setStateのアップデーターが2回呼ばれるらしい。
https://stackoverflow.com/questions/50819162/why-is-my-function-being-called-twice-in-react
https://stackoverflow.com/questions/61532410/why-my-render-method-is-react-called-twice

ChromeのDevtoolで確認すると、StrictModeの時はconsole.logさせると実ファイルのログと、VMのログが出るけど、StrictModeやめると、実ファイルのログだけでた。
けど、next devのログの方には依然として2回ログが出る。

意図としては、変な依存がないか確かめるためやでーとのことだが、発火要因がいまいちわからん。useState使用してなくて純粋にjsxだけ返すような下記ページで試しても2回ログでる。

sample.tsx
function Sample() {
  console.log("initialize");
  return <div>sample</div>;
}

export default Sample;

開発モードの時だけ2回実行されるだけで本番には一切影響しないんやで、これも安全に開発してほしい運営からの圧倒的配慮ッッッ!!!てことなのかなと思いました。

Nextjsで試したい時は

next.jsの場合にはこちらでStrictModeかどうか設定しているので適宜切り替えて、試してみることができる。
https://nextjs.org/docs/api-reference/next.config.js/react-strict-mode

Discussion