P0 Bug 修复演示

验证5个致命Bug的修复效果

Bug 7: reset() 不清理状态 ⚠️

问题: 调用 reset() 后,error、touched、dirty、validating 状态没有清除

测试步骤:

  1. 输入错误的 email: invalid-email
  2. 调用 form.reset()
  3. 检查所有状态是否清除

Bug 8: setValues() 缺少依赖验证 ⚠️

问题: 批量设置值时,依赖字段的验证不触发

测试场景:价格范围验证

  1. minPrice 依赖 maxPrice
  2. maxPrice 依赖 minPrice
  3. 批量设置冲突的值: { minPrice: 200, maxPrice: 50 }
  4. 检查依赖验证是否触发

Bug 10: getDirtyValues() 路径设置错误 ⚠️

问题: PathUtils.set() 返回值被忽略,导致嵌套字段的 dirty 值丢失

测试步骤:

  1. 修改嵌套字段: user.nameuser.profile.bio
  2. 调用 getDirtyValues()
  3. 检查返回的对象结构

Bug 11: batchUpdate 观察者通知不完整 ⚠️

问题: batchUpdate 只通知第一个字段的变化,其他字段被忽略

测试步骤:

  1. 批量更新3个字段: firstName, lastName, email
  2. 检查观察者收到几次通知
  3. 预期: 1次全局通知(空路径表示批量变更)

Bug 9: validateForm() 串行验证性能差 🐢

问题: 异步验证一个接一个等待,而不是并行执行

测试场景:

  1. 3个字段,每个异步验证耗时 100ms
  2. 串行执行: 100 + 100 + 100 = 300ms
  3. 并行执行: max(100, 100, 100) ≈ 100ms

修复总结

Bug问题影响修复方式
Bug 7reset() 不清理状态重置后错误仍显示重置所有 fieldStates
Bug 8setValues() 缺依赖验证批量更新后验证失效调用 validateDependentFields
Bug 10getDirtyValues() 路径错误嵌套 dirty 值丢失使用 PathUtils.set 返回值
Bug 11batchUpdate 通知不完整UI 只刷新一个字段全局变更通知(空路径)
Bug 9validateForm() 串行10个字段耗时 1000msPromise.all 并行验证