表单持久化示例

演示使用 serialize/deserialize 和 localStorage 实现表单自动保存、恢复、导出/导入

用户信息表单

0 / 200

💾 数据管理

📊 表单状态

已修改:
验证通过:
已修改字段: 0

📖 实现代码

1. 序列化与保存

// 序列化表单状态
const serialized = form._manager.serialize();

// 保存到 localStorage
localStorage.setItem('form-data', serialized);

2. 加载与恢复

// 从 localStorage 读取
const serialized = localStorage.getItem('form-data');
const data = JSON.parse(serialized);

// 恢复表单值
form._manager.setValues(data.values, false);

// 恢复初始值
form._manager.setInitialValues(data.initialValues, false);

3. 自动保存

let saveTimer: ReturnType<typeof setTimeout>;

form._manager.subscribe({
  onFieldChange: () => {
    // 防抖:停止输入1秒后保存
    clearTimeout(saveTimer);
    saveTimer = setTimeout(() => {
      const serialized = form._manager.serialize();
      localStorage.setItem('form-data', serialized);
    }, 1000);
  }
});

4. 页面卸载时保存

window.addEventListener('beforeunload', () => {
  if (form._manager.isDirty()) {
    const serialized = form._manager.serialize();
    localStorage.setItem('form-data', serialized);
  }
});

✨ 功能亮点

  • 自动保存:停止输入1秒后自动保存(可开关)
  • 页面刷新恢复:关闭页面后重新打开,数据不丢失
  • 导出/导入:支持JSON文件导出导入
  • 状态监控:实时显示保存状态和时间
  • 防抖优化:避免频繁保存影响性能

🎯 适用场景

  • 长表单填写(防止意外关闭丢失数据)
  • 草稿保存(文章编辑、问卷调查等)
  • 多设备同步(结合云端存储)
  • 离线表单(PWA 应用)
  • 数据导出备份

💡 使用提示

  • 试试填写表单后刷新页面,数据会自动恢复
  • 关闭"自动保存"后手动点击"立即保存"
  • 导出JSON后修改表单,再导入之前的数据
  • 查看浏览器开发者工具 → Application → Local Storage