Tauri tauri-apps/магазин плагинов + zustand

Я пытаюсь создать собственное хранилище в 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)
    },
}
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
1
0
139
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот рабочий исходный код с 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

LoKa 05.04.2024 08:15

ок, добавил демо

DeveloperMindset.com 05.04.2024 09:09

Все заработало... Спасибо

LoKa 05.04.2024 10:15

Другие вопросы по теме