Вы столкнулись с проблемой со ссылками на объекты и асинхронными методами.
CollectionReference#onSnapshot()
работает асинхронно, вызывая прослушиватель / наблюдатель моментального снимка при QuerySnapshot
событиях.
В основном, что происходит в вашем коде, это то, что вы присваиваете пустой массив acts
для state.activities
(та же ссылка на объект) в вашей мутации, а затем, позже, в вашем обработчике событий snapshot ,непосредственно вставьте в него элементы.
Быстрое решение состояло бы в том, чтобы зафиксировать мутацию в onSnapshot
наблюдателе
fetchActivities: context => {
let ref = db.collection('activities')
ref.onSnapshot(snapshot => {
let acts = []
snapshot.docChanges().forEach(change => {
if(change.type == 'added') {
acts.push({
id: change.doc.id,
name: change.doc.data().name,
day: change.doc.data().day
})
}
})
context.commit('SET_ACTIVITIES', acts)
})
}
Если вы хотите только произвести первоначальную выборку вашегоДля сбора данных используйте CollectionReference#get()
.Если он возвращает обещание, вы можете использовать его, чтобы сделать ваше действие составным
async fetchActivities ({ commit }) {
let snapshot = await db.collection('activities').get()
let acts = snapshot.docChanges().filter(({ type }) => type === 'added')
.map(({ doc }) => ({
id: doc.id,
name: doc.data().name,
day: doc.data().day
}))
commit('SET_ACTIVITIES', acts)
}