You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:10:00