如题
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 3 天前
检查下每次启动端口是不是一致的?
|