Я пытаюсь создать собственное хранилище в zustand для tauri-apps/plugin-store. При попытке изменить состояние получаю ошибку в консоли
[zustand persist middleware] Unable to update item 'storage', the given storage is currently unavailable.
Кто сталкивался с таким или может помочь?
Вот мой магазин и код хранилища.
import {create} from 'zustand'
import {persist, createJSONStorage, StateStorage} from 'zustand/middleware'
import {Store} from '@tauri-apps/plugin-store';
export const store = new Store('globalStore.bin');
interface MyState {
bears: number
addABear: () => void
}
export const useBearStore = create<MyState>()(
persist((set, get) => ({
bears: 0,
addABear: () => set({bears: get().bears + 1}),
}),
{
name: 'storage', // name of item in the storage (must be unique)
storage: createJSONStorage(() => storage), // (optional) by default the 'localStorage' is used
},
),
)
const storage: StateStorage = {
getItem: async (name: string): Promise<string | null> => {
console.info(name)
return (await store.get(name)) || null
},
setItem: async (name: string, value: string): Promise<void> => {
console.info(name, value)
await store.set(name, value)
},
removeItem: async (name: string): Promise<void> => {
console.info(name)
await store.delete(name)
},
}
Вот рабочий исходный код с zustand.
Все, что вам нужно было сделать, это переместить storage
выше useBearStore
.
Надеюсь, zustand
сопровождающие увидят это и исправят проблему.
import {create} from 'zustand'
import {persist, createJSONStorage, StateStorage} from 'zustand/middleware'
import {Store} from '@tauri-apps/plugin-store';
export const store = new Store('globalStore.bin');
interface MyState {
bears: number
addABear: () => void
}
const storage: StateStorage = {
getItem: async (name: string): Promise<string | null> => {
console.info(name)
return (await store.get(name)) || null
},
setItem: async (name: string, value: string): Promise<void> => {
console.info(name, value)
await store.set(name, value)
},
removeItem: async (name: string): Promise<void> => {
console.info(name)
await store.delete(name)
},
}
export const useBearStore = create<MyState>()(
persist((set, get) => ({
bears: 0,
addABear: () => set({bears: get().bears + 1}),
}),
{
name: 'storage', // name of item in the storage (must be unique)
storage: createJSONStorage(() => storage), // (optional) by default the 'localStorage' is used
},
),
)
ок, добавил демо
Все заработало... Спасибо
Сам tauri-apps/plugin-store работает нормально. Единственная проблема - использовать его вместе с zustand