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

Firebase set()未更新原有文档反而新建文档问题求助

问题根因

Chat组件未接收到正确的Firestore文档id,调用db.collection("posts").doc(id).set()时,id为undefined,Firestore会自动生成新的文档id写入数据,因此出现新建仅含read:true文档的问题。

修复步骤

    1. 补全Chat组件的id参数传递
      找到Chats组件中渲染Chat的代码段,补充id={id}的属性传递:
    {posts.map(({id, data: {profilePic, username, timestamp, imageUrl, read}}) => (
        <Chat 
            key={id} 
            id={id}
            username={username} 
            timestamp={timestamp} 
            imageUrl={imageUrl} 
            read={read} 
            profilePic={profilePic} 
        />
    ))}
    
    1. (可选优化)替换set为update方法
      仅更新单个字段时用update方法更符合语义,也避免merge配置异常带来的问题,修改Chat组件open函数中的数据库操作:
    db.collection("posts").doc(id).update({
        read:true
    });
    
    1. 已读内容禁止预览的补充防护
      当前代码中open函数已经添加了!read的判断,点击已读聊天不会触发跳转逻辑,如需更高安全性可以在/chats/view路由对应的组件中添加校验,判断对应聊天的read状态为true时直接跳转回聊天列表,避免用户手动输入路径访问已读内容。

内容的提问来源于stack exchange,提问作者Egon Adelsberger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 10:21:04