【发布时间】:2018-10-24 11:52:40
【问题描述】:
我是 nuxt.js 的新手,所以我想知道通过 REST api 设置一些数据的最佳方法是什么。
我有一个这样的商店文件夹:
store
-posts.js
-categories.js
-index.js
我尝试在index.js 中使用nuxtServerInit 操作设置数据:
export const actions = {
async nuxtServerInit({ dispatch }) {
await dispatch('categories/setCategories')
await dispatch('posts/loadPosts','all')
}
}
但不起作用:操作已调度(在服务器上)但未设置数据。
所以我尝试使用fetch,但每次加载我必须显示帖子的页面时都会调用此方法。即使,在总体布局中,我这样做:
<template>
<div>
<Header />
<keep-alive>
<nuxt/>
</keep-alive>
</div>
</template>
所以我现在的解决方案是以这种方式使用 fetch, 在页面组件中:
async fetch({store}){
if(store.getters['posts/getPosts'].length === 0 && store.getters['categories/getCategories'].length === 0 ){
await store.dispatch('categories/setCategories')
await store.dispatch('posts/loadPosts','all')
}
}
另外,我注意到的一件事是 fetch 似乎不适用于根页面组件 (pages/index.vue)
我的解决方案似乎可行,但也许还有另一种更好的方法来设置数据?
【问题讨论】:
-
您是否尝试过将 fetch 放入显示帖子组件的
created或mounted生命周期挂钩中? -
好的问题是,如果我使用 NuxtServerInit,那里调度的动作必须返回一个承诺,所以必须以'return'开头:返回 axios.get() 而不仅仅是 axios.get ()
标签: javascript vue.js vuejs2 nuxt.js