Next.js で React hooks を使おうと思って意気揚々と useEffect() って書いて実行をしたら以下のようなエラーが出てしまって彷徨ってしまったときのメモ。
Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.
非常に丁寧なエラーメッセージで、解説記事もあり分かりやすい。のだけど、どう考えてもどれにも該当していない…なぜと頭を悩ませていたけど、実際は3番めの React app が重複して読み込まれているという症状だった。
Next.js で SSR するときには npm run serve を実行するが、そのときに生成される dist ディレクトリが原因。これがある状態で npm run dev でビルドすると重複してしまう。なので、どちらかに統一するのが良い。
単純に dist ディレクトリを消しても良いし、 npm run clean で余計なファイルを一括で削除しても良い。これで Next.js で React hooks を使うことができる。