vue.js - 如何将 asyncData 外包给 Vuex Store?
问题描述
我目前正在从 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 中做到这一点?
解决方案
正如@aldarund 所说, fetch 方法正是您想要的。
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)
})
}
请参阅此处的文档。
推荐阅读
- python - 如何将动态键和值添加到字典
- reactjs - 当状态变量长度超过 4 或 5 时,React Native Chart Kit 会抛出渲染错误
- linux - 访问用于 DMA 操作的缓冲区时产生错误地址错误?
- javascript - 如何在 JS 中按顺序(非同时)进行 API 调用
- c# - Audit.Net 自定义字段放置在手动范围创建和基于操作的范围创建之间有所不同
- python - tkinter 嵌套菜单栏 python
- cmake - 我使用柯南安装 kestrel/1.5.12@kestrel/stable 但它说 `ERROR: kestrel/1.5.12@kestrel/stable: 'settings.arch_target' value not defined`
- node.js - graphql node api:如何将字段定义为可选?
- sql-server - SSIS - 遍历按创建顺序排序的文本文件,并将每个文件上的每条记录作为更新或插入到 SQL 表中处理
- bpf - 增加我的 struct char 数组的大小限制以传递更大的字符串