これらのブラウザグローバル変数をwindow
またはlocalStorage
を使用するReactコンポーネント)をサーバー側でレンダリングする場合、常に追加する必要があります
if (typeof localStorage !== 'undefined') { // then do stuff }
これらの 'localStorage is notdefined'エラーを取り除くために。
これに対する他のまともな解決策はありますか?
編集私のユースケース
window
は、innerwitdth
のような属性と、resize
のような生のブラウザイベントを追加するためのものです。localStorage
はJWTトークンを保存するためのものですサーバーサイドレンダリングは、アプリケーションがユニバーサルであることを意味します(同形として知られています)。ユニバーサルアプリケーションの場合、コードは有効であり、すべての環境でエラーなしで機能する必要があります。したがって、重要なルールはすべての環境で1つの同じプログラミングインターフェイスを使用するです。
言い換えると、ユニバーサルコードを作成する一般的な方法は3つあります。
既存のインターフェースを使用。ほとんどの環境では、数学演算、テキストを処理するコードなど、まったく同じ基本コードを実行できます。ただし、インターフェイスのプログラミングが難しい場合もあります。たとえば、UIアプリケーションの場合、データをHTTP Cookie
に保存でき、ブラウザとNodeJSは両方をサポートします。
インターフェースエミュレーション。環境がプログラミングインターフェイスをサポートしていない場合は、それを作成する必要があります。たとえば、NodeJSの場合、サーバー側でDOMAPIを使用するようにJSDOMに要求できます。
コード実行を無視。アプリケーションは、特定の環境でのみ指定されたコードを実行できます。したがって、それを除外することができます。たとえば、SSRを使用するUIアプリケーションの場合、サーバー側でGAウィジェットを実行する必要はありません。
あなたの場合には、JSDOM
(エミュレーション方法)とHTTP Cookie
(既存のインターフェース方法)を使用してください。