Firebase set()未更新原有文档反而新建文档问题求助
问题根因
Chat组件未接收到正确的Firestore文档id,调用db.collection("posts").doc(id).set()时,id为undefined,Firestore会自动生成新的文档id写入数据,因此出现新建仅含read:true文档的问题。
修复步骤
- 补全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} /> ))}- 补全Chat组件的id参数传递
- (可选优化)替换set为update方法
仅更新单个字段时用update方法更符合语义,也避免merge配置异常带来的问题,修改Chat组件open函数中的数据库操作:
db.collection("posts").doc(id).update({ read:true });- (可选优化)替换set为update方法
- 已读内容禁止预览的补充防护
当前代码中open函数已经添加了!read的判断,点击已读聊天不会触发跳转逻辑,如需更高安全性可以在/chats/view路由对应的组件中添加校验,判断对应聊天的read状态为true时直接跳转回聊天列表,避免用户手动输入路径访问已读内容。
- 已读内容禁止预览的补充防护
内容的提问来源于stack exchange,提问作者Egon Adelsberger
相关产品推荐
相关产品推荐

