为何Automerge IndexedDB适配器需先解引用Svelte Store才同步?
问题原因拆解
Svelte 5 $state.raw 与 Automerge 追踪逻辑不兼容
$state.raw返回的是原始对象引用,Automerge for Svelte需要通过显式解引用文档句柄来追踪变更。如果直接基于$state.raw的引用删除节点,Automerge内部的变更检测机制不会被触发,它无法感知到内存里的文档已经修改。Automerge IndexedDB 适配器的惰性同步特性
Automerge的IndexedDB适配器默认是按需同步——只有当它检测到文档句柄被主动访问(比如调用getHandleDeref)时,才会把内存中的变更写入本地存储。如果删除操作没触发这个检测,内存里的删除变更就不会持久化,刷新浏览器后只能从IndexedDB读取旧数据,已删除的节点自然就回来了。自定义AutomergeHandle的变更监听遗漏
你写的AutomergeHandle类可能没和$state.raw的变更做绑定。通过$state.raw修改节点时,AutomergeHandle没收到变更通知,也就不会触发同步到IndexedDB的流程。而调用getHandleDeref相当于主动唤醒了Automerge的变更检测,让它意识到文档需要持久化。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

