store 恢复
This commit is contained in:
@@ -156,9 +156,12 @@ const IframeDebugPage: React.FC = () => {
|
|||||||
title="iframe调试"
|
title="iframe调试"
|
||||||
right={
|
right={
|
||||||
connectStatus ? (
|
connectStatus ? (
|
||||||
<LoadingOutlined />
|
<CheckCircleOutlined style={{ color: "green" }} />
|
||||||
) : (
|
) : (
|
||||||
<CheckCircleOutlined color="green" />
|
<span>
|
||||||
|
<span style={{ marginRight: 4, fontSize: 12 }}>连接中...</span>
|
||||||
|
<LoadingOutlined />
|
||||||
|
</span>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -2,87 +2,15 @@
|
|||||||
import { create } from "zustand";
|
import { create } from "zustand";
|
||||||
import { persist, PersistOptions } from "zustand/middleware";
|
import { persist, PersistOptions } from "zustand/middleware";
|
||||||
|
|
||||||
// 自定义存储引擎,确保使用 localStorage
|
|
||||||
const localStorageStorage = {
|
|
||||||
getItem: (name: string): string | null => {
|
|
||||||
try {
|
|
||||||
return localStorage.getItem(name);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Failed to get item ${name} from localStorage:`, error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setItem: (name: string, value: any): void => {
|
|
||||||
try {
|
|
||||||
localStorage.setItem(name, JSON.stringify(value));
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Failed to set item ${name} to localStorage:`, error);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
removeItem: (name: string): void => {
|
|
||||||
try {
|
|
||||||
localStorage.removeItem(name);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Failed to remove item ${name} from localStorage:`, error);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
export function createPersistStore<T>(
|
export function createPersistStore<T>(
|
||||||
createState: (set: any, get: any) => T,
|
createState: (set: any, get: any) => T,
|
||||||
name: string,
|
name: string,
|
||||||
partialize?: (state: T) => Partial<T>,
|
partialize?: (state: T) => Partial<T>,
|
||||||
options?: Partial<PersistOptions<T, Partial<T>>>,
|
|
||||||
) {
|
) {
|
||||||
return create<T>()(
|
return create<T>()(
|
||||||
persist(createState, {
|
persist(createState, {
|
||||||
name,
|
name,
|
||||||
partialize,
|
partialize,
|
||||||
storage: localStorageStorage,
|
} as PersistOptions<T>),
|
||||||
version: 1, // 版本控制,用于数据迁移
|
|
||||||
onRehydrateStorage: () => state => {
|
|
||||||
console.log(`Store ${name} rehydrated:`, state);
|
|
||||||
},
|
|
||||||
onError: error => {
|
|
||||||
console.error(`Store ${name} persistence error:`, error);
|
|
||||||
},
|
|
||||||
...options,
|
|
||||||
} as PersistOptions<T, Partial<T>>),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 工具函数:手动保存状态到 localStorage
|
|
||||||
export const saveToLocalStorage = <T>(name: string, state: T): void => {
|
|
||||||
try {
|
|
||||||
const serializedState = JSON.stringify(state);
|
|
||||||
localStorage.setItem(name, serializedState);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Failed to save state to localStorage for ${name}:`, error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 工具函数:从 localStorage 加载状态
|
|
||||||
export const loadFromLocalStorage = <T>(name: string): T | null => {
|
|
||||||
try {
|
|
||||||
const serializedState = localStorage.getItem(name);
|
|
||||||
if (serializedState === null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return JSON.parse(serializedState);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Failed to load state from localStorage for ${name}:`, error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 工具函数:清除 localStorage 中的状态
|
|
||||||
export const clearFromLocalStorage = (name: string): void => {
|
|
||||||
try {
|
|
||||||
localStorage.removeItem(name);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(
|
|
||||||
`Failed to clear state from localStorage for ${name}:`,
|
|
||||||
error,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -12,9 +12,6 @@ export interface AppSettings {
|
|||||||
// 功能设置
|
// 功能设置
|
||||||
autoSave: boolean;
|
autoSave: boolean;
|
||||||
showTutorial: boolean;
|
showTutorial: boolean;
|
||||||
|
|
||||||
//App设置
|
|
||||||
paddingTop: number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SettingsState {
|
interface SettingsState {
|
||||||
@@ -35,7 +32,6 @@ const defaultSettings: AppSettings = {
|
|||||||
crashReportEnabled: true,
|
crashReportEnabled: true,
|
||||||
autoSave: true,
|
autoSave: true,
|
||||||
showTutorial: true,
|
showTutorial: true,
|
||||||
paddingTop: 44,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useSettingsStore = createPersistStore<SettingsState>(
|
export const useSettingsStore = createPersistStore<SettingsState>(
|
||||||
|
|||||||
@@ -27,22 +27,21 @@ interface UserState {
|
|||||||
clearUser: () => void;
|
clearUser: () => void;
|
||||||
login: (token: string, userInfo: User, deviceTotal: number) => void;
|
login: (token: string, userInfo: User, deviceTotal: number) => void;
|
||||||
logout: () => void;
|
logout: () => void;
|
||||||
updateUserInfo: (updates: Partial<User>) => void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useUserStore = createPersistStore<UserState>(
|
export const useUserStore = createPersistStore<UserState>(
|
||||||
(set, get) => ({
|
set => ({
|
||||||
user: null,
|
user: null,
|
||||||
token: null,
|
token: null,
|
||||||
isLoggedIn: false,
|
isLoggedIn: false,
|
||||||
|
|
||||||
setUser: user => set({ user, isLoggedIn: true }),
|
setUser: user => set({ user, isLoggedIn: true }),
|
||||||
|
|
||||||
setToken: token => set({ token }),
|
setToken: token => set({ token }),
|
||||||
|
|
||||||
clearUser: () => set({ user: null, token: null, isLoggedIn: false }),
|
clearUser: () => set({ user: null, token: null, isLoggedIn: false }),
|
||||||
|
|
||||||
login: (token, userInfo, deviceTotal) => {
|
login: (token, userInfo, deviceTotal) => {
|
||||||
|
// 只将token存储到localStorage
|
||||||
|
localStorage.setItem("token", token);
|
||||||
|
|
||||||
|
// 用户信息存储在状态管理中
|
||||||
const user: User = {
|
const user: User = {
|
||||||
id: userInfo.id,
|
id: userInfo.id,
|
||||||
account: userInfo.account,
|
account: userInfo.account,
|
||||||
@@ -62,18 +61,11 @@ export const useUserStore = createPersistStore<UserState>(
|
|||||||
};
|
};
|
||||||
set({ user, token, isLoggedIn: true });
|
set({ user, token, isLoggedIn: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
logout: () => {
|
logout: () => {
|
||||||
|
// 清除localStorage中的token
|
||||||
|
localStorage.removeItem("token");
|
||||||
set({ user: null, token: null, isLoggedIn: false });
|
set({ user: null, token: null, isLoggedIn: false });
|
||||||
},
|
},
|
||||||
|
|
||||||
updateUserInfo: updates => {
|
|
||||||
const currentUser = get().user;
|
|
||||||
if (currentUser) {
|
|
||||||
const updatedUser = { ...currentUser, ...updates };
|
|
||||||
set({ user: updatedUser });
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}),
|
}),
|
||||||
"user-store",
|
"user-store",
|
||||||
state => ({
|
state => ({
|
||||||
|
|||||||
Reference in New Issue
Block a user