状态持久化
与 URL hash 同步
import { create } from "zustand";
import { persist, StateStorage, createJSONStorage } from "zustand/middleware";
const hashStorage: StateStorage = {
getItem: (key): string => {
const searchParams = new URLSearchParams(location.hash.slice(1));
const storedValue = searchParams.get(key) ?? "";
return storedValue;
},
setItem: (key, newValue): void => {
const searchParams = new URLSearchParams(location.hash.slice(1));
searchParams.set(key, JSON.stringify(newValue));
location.hash = searchParams.toString();
},
removeItem: (key): void => {
const searchParams = new URLSearchParams(location.hash.slice(1));
searchParams.delete(key);
location.hash = searchParams.toString();
},
};
export const useBoundStore = create(
persist(
(set, get) => ({
fishes: 0,
addAFish: () => set({ fishes: get().fishes + 1 }),
}),
{
name: "food-storage", // unique name
storage: createJSONStorage(() => hashStorage),
}
)
);