局限性
虽然该插件提供了许多灵活性和功能,但也应考虑一些限制。
Storage 必须是同步的
在提供自定义storage
时,其方法必须是同步的。这是因为 Pinia 的状态订阅 ($subscribe
) 是同步的。
Workaround
要添加异步行为(例如使用异步存储),您可以尝试 订阅操作 ($onAction
).
引用不持久化
由于序列化过程,引用在刷新时丢失。 请考虑以下事项:
ts
const a = {
1: 'one',
2: 'two',
// ...
}
const b = a
在序列化之前,a
和 b
指向同一个对象:
ts
a === b // -> true
在反序列化之后,a
和 b
是具有相同内容的两个不同的对象:
ts
a === b // -> false
因此,a
和 b
之间的响应式丧失。
Workaround
要解决这个问题,您可以从持久化中排除 a
或 b
(使用pick
选项)并使用afterHydrate
钩子在hydration后重新填充它们。这样, a
和 b
再次具有相同的参照,响应式恢复。
非基本数据类型不持久化
由于序列化过程,诸如 Date
之类的非基本数据类型不会被再rehydrated为 Date
对象,而是被再水合为 string
。