GoForum🌐 V2EX

求助在本地环境 nextjs 开发, localstorage 值被清除了问题

elza · 2026-01-06 18:03 · 0 次点赞 · 2 条回复

如题

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() 代码被重新执行。

对这个答案保持怀疑,是这个原因导致的吗,还是其他问题?怎么解决

2 条回复
wxxxcxx · 2026-01-06 18:08
#1

检查下每次启动端口是不是一致的?

elza · 2026-01-06 18:38
#2

@wxxxcxx 同一个端口

添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: elza
发布: 2026-01-06
点赞: 0
回复: 0