
如题
import { create } from 'zustand'; import { createJSONStorage, persist } from 'zustand/middleware'; import type { UserInfo } from '@/service/user'; import { UserToken } from '@/interfaces/interfaces'; interface AuthState { accessToken: string | null; refreshToken: string | null; setTokens: (token: UserToken) => void; setIsHydrating: (value: boolean) => void; } export const useAuthStore = create<AuthState>()( persist( (set) => ({ accessToken: null, refreshToken: null, setTokens: (token: UserToken) => set({ accessToken: token.accessToken, refreshToken: token.refreshToken }), setIsHydrating: (value) => set({ isHydrating: value }) }), { name: 'auth-storage', // localStorage key onRehydrateStorage: () => (state) => { if (state) { console.log('rehydrated auth state:', state); state.setIsHydrating(false); } }, storage: createJSONStorage(() => localStorage) } ) ); 在用户登录后通过 zustand 的方式把 token 信息存储 localStorage 中,但在本地过一段时间或者代码结构调整,会发现之前 localStorage 存储的值突然没了,被清空了,变成了如下内容:
{"state":{"accessToken":null,"refreshToken":null,"isHydrating":false},"version":0}
可以肯定代码里没有任何 localStorage 的 clear 操作。
这个问题感到很疑惑,有问过 GPT ,它给我的回复是因为 nextjs 重新 rebuild 导致 localStorage 值清空,然后 export const useAuthStore = create<AuthState>() 代码被重新执行。
对这个答案保持怀疑,是这个原因导致的吗,还是其他问题?怎么解决
1 wxxxcxx 1 月 6 日 检查下每次启动端口是不是一致的? |