Skip to content

持久化、插件与 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 会在刷新后复活旧用户草稿。

答案只用于对照;请把自己的输入、输出和边界记录到项目实验日志中。

用心记录每一步成长