持久化、插件与 SSR 隔离:练习答案
迁移可写成纯函数,便于在没有浏览器的测试环境验证:
ts
function migrate(value: any): PersistedCart {
if (value?.version === 1 && Array.isArray(value.items)) {
return {
version: 2,
items: value.items.map((item: any) => ({ id: String(item.id), quantity: Math.max(1, Number(item.quantity) || 1) })),
}
}
return { version: 2, items: [] }
}旧数据只保留商品 id 和数量;token 被丢弃,损坏数据回到空草稿。登出 action 必须先清理内存 store,再清理持久化键,并让下一位用户重新拉取自己的数据;仅调用 $reset() 而不清理 storage 会在刷新后复活旧用户草稿。
答案只用于对照;请把自己的输入、输出和边界记录到项目实验日志中。