我目前正在从Firebase加载一些数据,因此我不想在服务器端进行渲染,因此可以在页面上的asyncData
中为SEO编制索引。
asyncData() {
return firebase.firestore().collection('Programms').get().then((querySnapshot) => {
const programms = [];
querySnapshot.forEach((doc) => {
const programm = doc.data();
programm.id = doc.id;
programms.push(programm)
})
return { programms: programms};
})
但是我想将其转换为我的vuex商店。
我知道我可以这样做:
const actions = {
async nuxtServerInit({ commit }) {
firebase.firestore().collection('Programms').onSnapshot((querySnapshot) => {
const programms = [];
querySnapshot.forEach((doc) => {
const programm = doc.data();
programm.id = doc.id;
programms.push(programm)
})
console.log('loaded Programms', programms)
commit('setProgramms', programms);
})
},
}
但是通过这种方式,将为我的应用程序中的每条路线加载数据。我不会仅在某些同时显示它们的页面中加载此数据,所以我不会不必要地加载它。
我如何在Vuex中做到这一点?
答案 0 :(得分:1)
正如@aldarund所说,获取方法正是您想要的。
fetch ({ store, params }) {
return firebase.firestore().collection('Programms').get().then((querySnapshot) => {
const programms = [];
querySnapshot.forEach((doc) => {
const programm = doc.data();
programm.id = doc.id;
programms.push(programm)
})
.then(() => {
store.commit('setPrograms', programms)
})
}
请参阅文档here。