Mistake Log · SwiftUI
错事白板的编辑功能:看起来小,其实是在重做数据流
错事白板 v1.0.4 加了一个很普通的功能:编辑记录。用户可以在复盘详情页修改标题、发生经过、原因、避免方式、分类和严重程度。
这听起来像是加一个编辑按钮,但真正动起来才发现,它其实是在检验整个数据流有没有设计好。
详情页不能拿旧快照
最早的详情页更像是拿着一个记录对象直接展示。这样做在只读时没问题,但一旦支持编辑,就可能出现一个尴尬状态:用户改了记录,详情页还显示旧内容。
所以我把详情页改成按记录 ID 去 store 里读取最新数据。页面关心的是「这条记录现在是什么」,而不是打开时传进来的那份旧快照。
复用编辑器,而不是再写一套
新增记录已经有一套编辑器。如果为了编辑旧记录再写一套表单,很快会出现字段不一致、校验不一致、文案不一致。
这次的做法是从已有记录生成一个草稿,再复用同一个编辑器。保存时调用更新逻辑,而不是创建新记录。
保存时要保留哪些东西
编辑记录不等于重建记录。有些字段应该被修改,有些状态必须保留:
- 创建时间不能变
- 已归档 / 未归档状态不能丢
- 记录 ID 要保持稳定
- 导出内容要使用编辑后的最新数据
- 如果记录已经不存在,详情页要给出温和提示
这些细节不做,短期可能看不出来,但用户一旦长期用,数据就会变得不可信。
这次学到的
本地优先 app 最大的优势是安心:数据在设备里,不需要账号,不依赖服务器。相应地,数据一致性就更应该做好。
一个编辑按钮背后,真正要保证的是用户相信「我现在看到的,就是我保存的最新版本」。这句话很朴素,但对记录类 app 来说几乎是全部。