如何将Immer增量补丁应用到Firestore文档?
问题:利用Immer补丁实现Firestore文档的增量更新
- 应用通过Immer处理状态,借助补丁/逆补丁实现撤销功能与文档历史记录
- 希望利用Immer produce生成的补丁,仅更新Firestore文档中受影响的部分,避免全量替换
- 当前只能手动编写add/replace/delete的分支逻辑,递归拼接路径字符串,操作十分繁琐
- 网上仅找到一个三年未更新的相关工具库,疑惑是否存在未考虑到的实现思路
代码现状
目前只能通过全量更新文档实现同步,这种方式并不理想:
useEffect(() => { firestoreApp.collection("items").doc(document.id).update(document) },[document])
期望的实现方向(在produce的补丁回调中处理增量更新):
setDocument(produce(document, (draft) => { draft.newField = "foo" }, (patches, inversePatches) => { patches.forEach(patch => { console.log(patch); /* 此处希望用firestoreApp.collection("items").doc(document.id).update(data)更新Firestore文档, 但"data"应仅为原文档中受Immer补丁影响的部分 */ }) } ))
题外话
曾尝试用Bing Chat求助,但它完全没理解需求,生成的代码毫无帮助;进一步询问逆补丁的应用时,仅简单重命名变量,未解决实际问题。
内容的提问来源于stack exchange,提问作者elunomas
相关产品推荐
相关产品推荐

