Open6
React19でRecoilが動かない
とりあえずpnpmに切り替えてからTODOリストにReact19 RCをインストールして起動。
pnpm add --save-exact react@rc react-dom@rc
Recoilのリポジトリに立っているIssue通りのエラーが発生
pnpm patch recoil
して指定されたフォルダーを開き、以下のファイルを編集してpnpm patch-commit '/path/to/folder'
する。Issueに書かれているようにcurrentRendererSupportsUseSyncExternalStore
を常にtrue
を返すようにパッチを当てる。
- /cjs/index.js
- /es/index.js
- /native/index.js
- /umd/index.js
動きはした。今回のシンプルなアプリケーションでは動いたけど様々なRecoilのAPIを多用しているアプリケーションではどうなるかはわからない。
React19へのアップデートでReactからexportされているSECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
が_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE
に名前が変わることが原因。
Recoilでガッツリ使われている。
RecoilはReact16を依存に持っているからRecoilがReact19をなぜ参照するのか調べないといけなさそう。
バンドラーの問題でバンドラーを直さなければいけないのか、モジュールの仕組み的にRecoilの依存しているReactを19まで上げなければいけないのか分かっていない。
参考記事
- https://github.com/facebookexperimental/Recoil/blob/main/packages/recoil/core/Recoil_ReactMode.js#L40
- https://github.com/reactjs/react.dev/issues/3896
- https://github.com/reactwg/react-18/discussions/86
- https://react.dev/blog/2024/04/25/react-19-upgrade-guide#libraries-depending-on-react-internals-may-block-upgrades