何度、くじけそうになったか…
React Hooksを使い始めた頃、CRAなどで作ったサイトはともかく
Gatsbyを使った時など、かなりの頻度でInvalid hook call warningに見舞われ、最悪の思いをした人も少なくないでしょう。
この記事では、Invalid hook call warningとなかよくなるための「いくつかのルール」を教えます。
※ 原因は、こちらを読んでください
Yarnを使う
「いろんなReactが混じっている」は、Yarnを使うことで解消されます。
yarn dedupe
と打ってみてください。
error The dedupe command isn't necessary. `yarn install` will already dedupe.
yarn install
とした時点でパッケージの重複がなくなりInvalid hook call warningの確率が減ります。
yarn workspaceを使う
複数のリポジトリを管理していると、下みたいにReactが被ります。
root
├ packageA - React@^16.13.2
└ packageB - React@16.12.0
例えば、「packageBでカスタムフックを用意して、packageAで使っている」ような状況です。
packageA -> packageB
(依存関係)
こうした状況で、Invalid hook call warningは起きやすいです。
こうした場合は、Yarn Workspaceを使いましょう。
少しフォルダ構成を変えましょう。
root
└ packages
├ packageA - React@^16.13.2
└ packageB - React@16.12.0
root
のフォルダにpackages
フォルダを作っただけです。
バージョンは揃えておきましょう
packageA
とpackageB
のReactのバージョンは、どちらかに揃えましょう。
cd packages/packageB
yarn upgrade React
yarn workspaceを導入しましょう
root
フォルダに移動しましょう
cd <path to root>
初期化します。
yarn init -y
package.json
にworkspaces
を足します。
{
...,
workspaces: ["packages/*"]
}
**
ここで、事前に各パッケージの node_modules / yarn.lock / package-lock.json を削除しておきましょう
**
さて、root
にて
yarn
を実行します。
これで、React
がルートフォルダのnode_modules
に集約され、Invalid hook call warning の確率が減ります。
Gatsbyでの Invalid hook call warning
GatsbyでInvalid hook call warningが起きたときは、何か別の原因が邪魔をしている場合があります。
とりあえず
gatsby build
と打ってみましょう。
そうすると「真のエラー」が出てくると思います。
それを調べ、直してから、もう一度 gatsby develop
で開発に戻りましょう。
おわりに
たぶん、ここまでやっても起こるときは起こるのですが、多少はエラーでスタックする時間を減らせると思っています。
お役に立ちますように。