Next.js使用時にrecoil-persistのStorageを変更する

公開日時
更新日時

Next.js + Recoilの利用時に、ページをリロードしても状態を保持しておきたかったのでrecoil-persistを使って永続化することにした。

recoil-persistはデフォルトだとlocalStorageに保存されるが、storageオプションを設定することで任意のStorageを利用することができる。

recoilPersist({
  key: 'recoil-persist',
  storage: sessionStorage,
})

ただし、↑の設定をした場合にNext.jsだとサーバ側でPre-renderingが行われるため、windowオブジェクトが存在せず↓のエラーが発生する。

ReferenceError: sessionStorage is not defined

そこで、↓のようにしてクライアント側で実行された場合のみstorageを指定するようにした。

recoilPersist({
  key: 'recoil-persist',
  storage: typeof window === 'undefined' ? undefined : window.sessionStorage,
})

これでatomの値をsessionStorageに保存できるようになった。

参考


Related #next.js

Next.jsで環境に応じて特定のページを非表示にする

NODE_ENVでredirectsを出し分けた

Next.jsで動的URLをRewriteする

next.config.jsにrewritesを追加

Next.js + typescriptでpathsのエイリアスがModule not foundになる

next.config.jsに追記する必要があった

Next.js + Algoliaで全文検索UIを実装する

react-instantsearchを利用

Next Link使用時にlazysizesでの画像更新ができない場合の対応方法

lazysizes attribute changeという公式プラグインを使う