编辑器初始化会触发假保存
假保存的连锁后果
打开笔记 → 编辑器 round-trip → 字符串变化 → 误判为用户编辑
→ 发保存请求 → 数据库 updatedAt 变新
→ 列表按 updatedAt 倒序 → 当前卡片被弹到顶部
→ 左侧列表滚动位置跳走(看起来像「滚动记忆失败」)
所以「点开卡片后列表跳位」的根因往往不是滚动记忆,而是假保存改了排序字段。
修法
- 忽略初始化那次更新:已有内容的笔记,编辑器初始化时的第一次 Markdown 更新直接丢弃;只有之后真正编辑产生的更新才保存。空笔记仍保留第一次真实输入保存,避免新建丢内容。
- 当前正在查看/编辑的项不因自动保存即时重排:列表默认仍按
updatedAt排序,但被选中的卡片不立刻弹到顶部,等离开、切换区、刷新列表时再重排。这样既保留「最近编辑在上面」,又不跳动。 - 更彻底的方向是让左侧列表根本不重建(见 master-detail),而不是「滚走后再恢复」。
相关
- 判据要用真值而非代理 —— 「字符串 diff」是「用户是否编辑」的代理,只在格式整理处分叉
- 列表切换要用master-detail而非重建列表 —— 让左侧列表根本不重建,比「滚走后再恢复」更彻底
- 讲bug先讲现象再讲根因