infiniteHandler($state) {
var next = db
.collection("posts")
.orderBy("timestamp", "desc")
.startAfter(this.lastVisible)
.limit(3)
next.get().then(documentSnapshots => {
//Get the last visible document
// this.lastVisible =
// documentSnapshots.docs[documentSnapshots.docs.length - 1]
if (documentSnapshots.docs.length == 0) $state.complete()
else {
this.$store.commit(
"modules/posts/updateLastVisible",
documentSnapshots.docs[documentSnapshots.docs.length - 1].data()
.timestamp
)
}
documentSnapshots.forEach(doc => {
var post = doc.data()
post.docID = doc.id
this.$store.commit("modules/posts/pushPost", post)
})
$state.loaded()
})
}
Это мой бесконечный загрузчик, который извлекает новые записи в БД, как только достигнут конец списка.Работает нормально до сих пор.
Это мой первый выбор, когда страница загружается
async fetch({ store }){
if (store.state.modules.posts.posts.length < 5) {
let posts = []
await db
.collection("posts")
.orderBy("timestamp", "desc")
.limit(3)
.get()
.then(querySnapshot => {
store.commit(
"modules/posts/updateLastVisible",
querySnapshot.docs[2].data().timestamp
)
querySnapshot.forEach(doc => {
var x = doc.data()
x.docID = doc.id
posts.push(x)
})
})
store.commit("modules/posts/fetchedPosts", posts)
}
}
В основном проблема заключается в том, что я получаю первые 3 записи, которые я получаю на странице загрузки снова, когда я получаю в моемОбработчик бесконечной загрузки, который приводит к тому, что записи отображаются дважды, этого не должно происходить, потому что this.lastVisible
имеет метку времени 3-го элемента, которую я выбираю при загрузке, поэтому их следует игнорировать.
После этих элементов всеработает нормально с .startAfter
, но первые 3 загружаются снова не имеет смысла.Я проверил магазин с помощью devtools, и все работает нормально, this.lastVisible
имеет правильное значение при первом вызове обработчика infiniteLoading.
Bounty Edit: Хорошо, у меня все еще есть проблема, которую я пытался воспроизвестинемного больше, чтобы найти проблему, но она все еще происходит ... Сейчас я назначу награду, и я надеюсь, что любой сможет помочь.