Я работаю над приложением Vue, управляемым хранилищем состояний Vuex.
Теперь я пытаюсь подключить его к Google Firebase Firestore для постоянного хранения и извлечения данных.
В настоящее время я работаю с шаблоном, в котором vuex action
запускает запрос firestore, который, в свою очередь, commits/dispatches
a mutation/action
обновляет магазин. Хотя это не обязательно кажется неправильным, оно кажется немного сложным / сложным, и мне интересно, есть ли более четкий шаблон / лучшая практика для организации такого взаимодействия.
Пример текущего решения:
// firebase.js
export default {
fetchUserId: user => {
usersCollection.where('user', '==', user).limit(1).get().then(u => {
if(u.size > 0 && u.docs[0].exists)
store.dispatch('setLoggedInUserId', userId)
else
throw 'user not found in DB: ' + user
})
},
watchProjects: userId => {
usersCollection.doc(userId).collection('projects').onSnapshot(querySnapshot => {
const projects = []
querySnapshot.forEach(doc => {
projects.push({ id: doc.id, ...doc.data() })
})
store.commit('updateProjects', projects)
})
}}
А в магазине:
actions: {
loginUser({ commit }, user) {
commit('setLoggedInUser', user)
firestore.fetchUserId(user)
},
setLoggedInUserId({ commit }, userId) {
commit('setLoggedInUserId', userId)
firestore.watchProjects(userId)
},