RemixでSSRをバイパスするにはremix-utilsを使おう
Remixでleafletを使用する開発で、SSRフレームワーク定番(参考1, 参考2)の"window is not defined"がサーバ側の端末で表示される現象に遭遇しました。
要するに、ブラウザでのみ動かしたいコードがサーバ側のSSRで動いてしまっているわけです。
Next.jsだとdynamicで囲って対処していましたが、Remixでどうやってやるのか調べました。
Remix Viteで一部をクライアントサイドのみにするでは、ReactのlazyとSuspenseを組み合わせて行けるとのことでしたが、私が試した限りではうまくいきませんでした(やり方が悪かっただけかもしれません)。
結局、remix-utilsのClientOnlyを使って解決しました。
動作確認したバージョン
- @remix-run/cloudflare: 2.10.2
- remix-utils: 7.6.0
- react: 18.3.1
フロントエンド界隈は開発が活発なので、この記事の内容もあっという間に陳腐化するかもしれませんが、備忘録として残しておきます。