Configuration
The plugin comes pre-configured with the following:
localStorageas storage.store.$idas default key for storage.JSON.stringify/destras serializer/deserializer.- The whole state is persisted to the storage.
USING NUXT ?
Defaults are different with the Nuxt module to provide SSR-friendly experience. Head over to the Nuxt usage documentation to learn more.
You can pass an object to the persist property of the store to configure the persistence.
import { defineStore } from 'pinia'
import { ref } from 'vue'
export const useStore = defineStore('main', () => {
const someState = ref('hello pinia')
return { someState }
}, {
persist: {
// CONFIG OPTIONS HERE
}
})import { defineStore } from 'pinia'
export const useStore = defineStore('main', {
state: () => ({
someState: 'hello pinia',
}),
persist: {
// CONFIG OPTIONS HERE
},
})key
- type:
string - default:
store.$id
Key used to reference the stored deserialized data in the storage.
Example
import { defineStore } from 'pinia'
export const useStore = defineStore('store', {
state: () => ({
someState: 'hello pinia',
}),
persist: {
key: 'my-custom-key',
},
})This store will be persisted under the my-custom-key key in localStorage.
storage
- type:
StorageLike - default:
localStorage
Storage to persist the data to. Must have getItem: (key: string) => string | null and setItem: (key: string, value: string) => void methods.
Example
import { defineStore } from 'pinia'
export const useStore = defineStore('store', {
state: () => ({
someState: 'hello pinia',
}),
persist: {
storage: sessionStorage,
},
})This store will be persisted in sessionStorage.
WARNING
Storage must be synchronous. More info in the limitations page.
serializer
- type:
Serializer - default:
JSON.stringify/destr
Custom serializer to serialize data before persisted and deserialize data before rehydrating the store. Must have serialize: (value: StateTree) => string and deserialize: (value: string) => StateTree methods.
Example
import { defineStore } from 'pinia'
import { parse, stringify } from 'zipson'
export const useStore = defineStore('store', {
state: () => ({
someState: 'hello pinia',
}),
persist: {
serializer: {
deserialize: parse,
serialize: stringify
}
},
})This store will use zipson’s stringify/parse to handle serialization/deserialization with added compression.
pick
- type:
string[] | Path<StateTree>[] - default:
undefined
Array of dot-notation paths to pick what should be persisted. [] means no state is persisted and undefined means the whole state is persisted.
Example
import { defineStore } from 'pinia'
export const useStore = defineStore('store', {
state: () => ({
save: {
me: 'saved',
notMe: 'not-saved',
},
saveMeToo: 'saved',
}),
persist: {
pick: ['save.me', 'saveMeToo'],
},
})In this store, only save.me and saveMeToo values will be persisted. save.notMe will not be persisted.
TIP
Auto-completion from state-infered type can help you with what paths can be picked.
omit
- type:
string[] | Path<StateTree>[] - default:
undefined
Array of dot-notation paths to omit from what should be persisted. [] or undefined means the whole state persisted (nothing is omitted).
Example
import { defineStore } from 'pinia'
export const useStore = defineStore('store', {
state: () => ({
ignore: {
me: 'not-saved',
notMe: 'saved',
},
ignoreMeToo: 'not-saved',
}),
persist: {
omit: ['ignore.me', 'ignoreMeToo'],
},
})In this store, only ignore.notMe value will be persisted. ignore.me and ignoreMeToo will not be persisted.
TIP
Auto-completion from state-infered type can help you with what paths can be omitted.
beforeHydrate
- type:
(context: PiniaPluginContext) => void - default:
undefined
Hook function run before hydrating a store state with persisted data. The hook gives access to the whole PiniaPluginContext. This can be used to enforce specific actions before hydration.
Example
import { defineStore } from 'pinia'
export const useStore = defineStore('store', {
state: () => ({
someState: 'hello pinia',
}),
persist: {
beforeHydrate: (ctx) => {
console.log(`about to hydrate '${ctx.store.$id}'`)
}
},
})This store will log about to hydrate 'store' before being rehydrated.
WARNING
Beware of interacting with PiniaPluginContext, unexpected behaviors may occur.
afterHydrate
- type:
(context: PiniaPluginContext) => void - default:
undefined
Hook function run after rehydrating a persisted state. The hook gives access to the whole PiniaPluginContext. This can be used to enforce specific actions after hydration.
Example
import { defineStore } from 'pinia'
export const useStore = defineStore('store', {
state: () => ({
someState: 'hello pinia',
}),
persist: {
afterHydrate: (ctx) => {
console.log(`just hydrated '${ctx.store.$id}'`)
}
},
})This store will log just hydrated 'store' after being rehydrated.
WARNING
Beware of interacting with PiniaPluginContext, unexpected behaviors may occur.
debug
- type:
boolean - default:
false
When set to true, any error that may occur while persisting/hydrating stores will be logged with console.error.
WARNING
No environment check is done: if this is enabled, errors will also be logged in production.