Skip to content

配置

该插件的默认配置如下:

如何你不想使用默认的配置,那么你可以将一个对象传递给 Store 的 persist 属性来配置持久化。

ts
import { defineStore } from 'pinia'

export const useStore = defineStore('main', {
  state: () => ({
    someState: '你好 pinia',
  }),
  persist: {
    // 在这里进行自定义配置
  },
})

key

  • 类型string
  • 默认值store.$id

Key 用于引用 storage 中的数据

例如
ts
import { defineStore } from 'pinia'

export const useStore = defineStore('store', {
  state: () => ({
    someState: '你好 pinia',
  }),
  persist: {
    key: 'my-custom-key',
  },
})

这个 Store 将被持久化存储在 localStorage 中的 my-custom-key key 中。

storage

将数据持久化到 storage 中,必须具有 getItem: (key: string) => string | nullsetItem: (key: string, value: string) => void 两个方法。

例如
ts
import { defineStore } from 'pinia'

export const useStore = defineStore('store', {
  state: () => ({
    someState: '你好 pinia',
  }),
  persist: {
    storage: sessionStorage,
  },
})

这个 store 将被持久化存储在 sessionStorage中。

警告

存储数据必须是同步的,更多信息前往局限性页面查看。

paths

  • 类型string[]
  • 默认值undefined

用于指定 state 中哪些数据需要被持久化。[] 表示不持久化任何状态,undefinednull 表示持久化整个 state。

例如
ts
import { defineStore } from 'pinia'

export const useStore = defineStore('store', {
  state: () => ({
    save: {
      me: 'saved',
      notMe: 'not-saved',
    },
    saveMeToo: 'saved',
  }),
  persist: {
    paths: ['save.me', 'saveMeToo'],
  },
})

该 store 中, 只有 save.mesaveMeToo 被持久化,而 save.notMe 不会被持久化。

serializer

该配置能够指定持久化时所使用的序列化方法,以及恢复 Store 时的反序列化方法。另外,必须具有 serialize: (value: StateTree) => stringdeserialize: (value: string) => StateTree 方法。

例如
ts
import { defineStore } from 'pinia'
import { parse, stringify } from 'zipson'

export const useStore = defineStore('store', {
  state: () => ({
    someState: '你好 pinia',
  }),
  persist: {
    serializer: {
      deserialize: parse,
      serialize: stringify,
    },
  },
})

该 store 将使用 zipsonstringify/parse 处理序列化/反序列化,并进行压缩。

beforeRestore

  • 类型(context: PiniaPluginContext) => void
  • 默认值undefined

该 hook 将在从 storage 中恢复数据之前触发,并且它可以访问整个 PiniaPluginContext,这可用于在恢复数据之前强制地执行特定的操作。

例如
ts
import { defineStore } from 'pinia'

export const useStore = defineStore('store', {
  state: () => ({
    someState: '你好 pinia',
  }),
  persist: {
    beforeRestore: (ctx) => {
      console.log(`即将恢复 '${ctx.store.$id}'`)
    },
  },
})

该 Store 将会在恢复数据之前输出 即将恢复 'store'

警告

请谨慎使用 PiniaPluginContext,意外可能会出现。

afterRestore

  • 类型(context: PiniaPluginContext) => void
  • 默认值undefined

该 hook 将在从 storage 中恢复数据之后触发,并且它可以访问整个 PiniaPluginContext,这可用于在恢复数据之后强制地执行特定的操作。

例如
ts
import { defineStore } from 'pinia'

export const useStore = defineStore('store', {
  state: () => ({
    someState: '你好 pinia',
  }),
  persist: {
    afterRestore: (ctx) => {
      console.log(`刚刚恢复完 '${ctx.store.$id}'`)
    },
  },
})

该 Store 将会在恢复数据之后输出 刚刚恢复完 'store'

警告

请谨慎使用 PiniaPluginContext,意外可能会出现。

debug

  • 类型boolean
  • 默认值false

当设置为 true 时,持久化/恢复 Store 时可能发生的任何错误都将使用 console.error 输出。

根据 MIT 许可证发布