Pinia需通过persist配置实现选择性持久化:用paths精确指定顶层字段(如['token','theme','language']),不支持嵌套;omit可反向排除临时字段;storage和key可自定义存储位置与键名;注意JSON序列化限制。

Pinia 本身不保存数据到本地,状态刷新即丢。要只保存其中几个字段(比如 token、theme、language),关键是在 store 的 persist 配置里用 paths 明确列出它们。
用 paths 精确指定要存的字段
在 defineStore 中设置 persist: { paths: [...] },插件就只序列化并存储这些顶层属性:
-
paths: ['token', 'theme', 'language']—— 只存这三个字段,其余如loading、error、searchQuery不会进 localStorage - 注意:paths 不支持点号嵌套写法(如
'profile.name'),只能写 state 的直接属性名;深层字段需先扁平化,或配合partialize函数处理 - 空数组
paths: []表示不存任何字段;不写paths则默认存整个 state
用 omit 排除不需要的字段
如果不想一个个列要存的字段,也可以反向操作,用 omit 把临时或敏感字段剔除:
-
omit: ['loading', 'error', 'formDraft']—— 这些字段不会被持久化,其余全部保留 - 和
paths不能同时使用,二者互斥 - 适合字段多、只需排除少数临时状态的场景
搭配 storage 和 key 提升控制力
只存字段还不够,还要注意存哪儿、叫什么名:
-
storage: sessionStorage—— 适合仅当前标签页有效的数据(如表单中间步骤),避免跨标签干扰 -
key: 'my-user-config'—— 自定义存储键名,比默认的pinia/user更清晰,也方便调试和清理 - 敏感字段(如 token)建议优先用
sessionStorage,降低多标签共享带来的风险
留意序列化限制和边界情况
持久化本质是 JSON 存取,有些值无法直接保存:
- 函数、undefined、Symbol、Date 对象、Map/Set 等会被忽略或转成 null
- 如果 state 里有 Date 类型字段,可提前转成 ISO 字符串,或自定义
serializer - 大对象(如完整用户信息)建议只存必要字段,避免 localStorage 容量超限或拖慢读写










