【发布时间】:2020-08-06 22:48:47
【问题描述】:
我有一个“帖子”,它在react 中监听其 cmets 的变化,如下所示:
// React hook state
const [comments, setComments] = useState([])
// My listener in useEffect
db.collection(`users/${userId}/posts/${postId}/comments`)
.onSnapshot((querySnapshot) => {
let newComments = []
querySnapshot.forEach(function (doc) {
newComments.push({
id: doc.id,
...doc.data()
})
})
setComments(newComments)
})
当用户创建新的 cmets 时,我设置了加载状态并禁用了评论部分
// React hook
const [isLoading, setLoading] = useState(false)
// Add comment
const addComment = () => {
const comment = {text:"hello"}
setSaving(true)
db.collection(`users/${postUid}/posts/${postId}/comments`).doc()
.set(comment)
.then(()=>{
setSaving(false)
})
}
我的问题是(一个很好的问题),订阅onSnapshot 在我的addComment 回调完成之前获得了新评论,造成了一些视觉问题:
- 当评论输入仍在加载但评论已经存在时,使应用程序看起来有问题
- 如果出现错误(例如:数据库权限问题),评论会出现在列表中然后消失...
知道在创建完成之前我可以更改什么以不更新 onSnapshot 吗?
【问题讨论】:
标签: firebase google-cloud-firestore