У меня есть «пост», который прослушивает изменения в своих комментариях в react
примерно так:
// 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)
})
Когда пользователь создает новые комментарии, я устанавливаю состояние загрузки и отключаю раздел комментариев
// 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
до завершения создания?