Skip to content

Pinia

createPiniaPersist() (vue-storage-kit/pinia) — плагин Pinia, который автоматически делает персистентным состояние каждого хранилища, по умолчанию ключуясь по собственному $id хранилища.

ts
import { createPinia } from 'pinia'
import { createPiniaPersist } from 'vue-storage-kit/pinia'

const pinia = createPinia()
pinia.use(createPiniaPersist({ target: 'local' }))

После установки каждое хранилище, созданное из этого экземпляра pinia, становится персистентным с одними и теми же опциями — конфигурации на уровне отдельного хранилища нет; выделите отдельный вызов pinia.use() (или второй экземпляр Pinia), если разным хранилищам нужны разные target/pick/omit.

Опции

key

string · по умолчанию: собственный $id хранилища

Ключ хранилища, под которым сохраняются данные.

target

StorageTarget · по умолчанию: 'local'

pick

string[]

Сохранять только эти ключи состояния. Взаимоисключающе с omit — если заданы оба, побеждает pick.

omit

string[]

Сохранять каждый ключ состояния, кроме этих.

serializer

Serializer<unknown> · по умолчанию: JSON-сериализатор

beforeRestore

(ctx: PiniaPluginContext) => void

Вызывается непосредственно перед применением восстановленного значения к состоянию хранилища.

afterRestore

(ctx: PiniaPluginContext) => void

Вызывается сразу после применения восстановленного значения.

onError

(err: StorageError) => void

Вызывается при сбое чтения/записи/парсинга вместо выброса исключения.

Пример

ts
import { createPinia, defineStore } from 'pinia'
import { createPiniaPersist } from 'vue-storage-kit/pinia'

const pinia = createPinia()
pinia.use(
  createPiniaPersist({
    target: 'local',
    omit: ['transientUiFlag'],
    onError: (err) => console.error('Persist failed:', err),
  }),
)

const useSettings = defineStore('settings', {
  state: () => ({ theme: 'light', transientUiFlag: false }),
})

// Чтение/запись `theme` в этом хранилище теперь автоматически проходит
// через localStorage под ключом "settings".

Восстановление выполняется асинхронно (адаптер может быть на базе IndexedDB) — мутация, сделанная в той же синхронной итерации, что и создание хранилища, никогда не будет молча отменена более медленно разрешающимся восстановлением, так что безопасно устанавливать начальные переопределения сразу после создания хранилища.