【发布时间】:2021-06-24 17:12:27
【问题描述】:
我在 nuxt 中创建了一个站点并从 worpdress api 获取数据。 我有几个商店:home.js、solutions.js、tipo.js、portfolio.js 和 options.js。
在 fetch 中,我检查存储数组是否为空,然后调用调度和填充数组。
export default {
async fetch({ store }) {
try {
if (store.getters['home/home'].length === 0) {
await store.dispatch('home/fetchHome');
}
if (store.getters["solutions/getSolutions"].length === 0) {
await store.dispatch('solutions/fetchSolutions');
}
if (store.getters["tipo/getTipo"].length === 0) {
await store.dispatch('tipo/fetchTipo');
}
if (store.getters["portfolio/getPortfolio"].length === 0) {
await store.dispatch('portfolio/fetchPortfolio');
}
if(store.getters["options/getOptions"].length === 0){
await store.dispatch('options/fetchOptions');
}
} catch (e) {
console.log(e, 'e no data')
}
},
components: { HomeContacts, PortofolioSlider, Clients, ChiSiamo, Solutions, HomeIntro }
}
但问题是,页面加载时间过长。因为我将调度称为 throw await,我认为这就是问题所在。
如何在 fethc 中调用所有调度,而不是异步但并行?
我看到使用 fetch 优于 asyncData 的优势在于,仅当我第一次加载页面时,我需要稍等片刻,数组将填满,当我从另一个页面到达当前页面时,不会通过api请求,数据会从store中输出。
只是关于 nuxt 在意识形态、如何工作以及什么时候更好用的信息很少。接下来,这会更好。
这个方法不行。
fetch({ store }) {
const promise1 = new Promise((resolve, reject) => {
if (store.getters['home/home'].length === 0) {
resolve(store.dispatch('home/fetchHome'));
}
});
const promise2 = new Promise((resolve, reject) => {
if (store.getters["solutions/getSolutions"].length === 0) {
resolve(store.dispatch('solutions/fetchSolutions'));
}
});
const promise3 = new Promise((resolve, reject) => {
if (store.getters["tipo/getTipo"].length === 0) {
resolve(store.dispatch('tipo/fetchTipo'));
}
});
const promise4 = new Promise((resolve, reject) => {
if (store.getters["portfolio/getPortfolio"].length === 0) {
resolve(store.dispatch('portfolio/fetchPortfolio'));
}
});
const promise5 = new Promise((resolve, reject) => {
if (store.getters["options/getOptions"].length === 0) {
resolve(store.dispatch('options/fetchOptions'));
}
});
Promise.all([promise1, promise2, promise3, promise4, promise5])
.then((data) => console.log(data))
.catch((error) => console.log(error));
【问题讨论】:
-
Next 上的方法是什么?
-
page is loading to long time = wordpress api,解决方案是制作你自己的wp api,减少功能(bog-standard api将加载所有wp,但根本不输出html)或减少调用或根据需要,另外您可以使用循环来保存几行而不使其异步
-
@LawrenceCherone 所以与前端无关。 Nuxt 和 Next 仅在前端获取数据方面有什么区别?
-
异步仍然是一个因素
-
@LawrenceCherone
async到目前为止在 Next 和 Nuxt 中是相同的。