在最新版本的 Nuxt (2.14) 中,他们引入了在不更改代码时构建应用程序的优化(以显着缩短构建时间)。
我在 jamstack 中制作网站,在 netlify 上部署nuxt generate,直到现在,使用target: 'server'. 我尝试了新target: 'static'的以利用这个新功能,但我的代码不会构建,因为在这种模式下,应用程序似乎无法访问this.$route以生成动态页面。
所以,我的问题是:这彼此有何不同?当我切换target到我要注意什么?
我是 Vue 和 Nuxt 的新手,我正在使用这些框架以通用模式构建我的第一个网站。
我对商店在 nuxt 中的工作方式有些困惑,因为按照官方文档,我无法实现我的想法。
在我的商店文件夹中,我现在只放置了一个名为“products.js”的文件,在那里我像这样导出状态:
export const state = () => ({
mistica: {
id: 1,
name: 'mistica'
}
})
Run Code Online (Sandbox Code Playgroud)
(对象被简化以提供更清晰的解释)
在同一个文件中,我设置了一个简单的 getter,例如:
export const getters = () => ({
getName: (state) => {
return state.mistica.name
}
})
Run Code Online (Sandbox Code Playgroud)
现在,根据文档,在我这样设置的组件中:
computed: {
getName () {
return this.$store.getters['products/getName']
}
}
Run Code Online (Sandbox Code Playgroud)
或者(不知道用什么):
computed: {
getName () {
return this.$store.getters.products.getName
}
}
Run Code Online (Sandbox Code Playgroud)
但是当在模板中使用“getName”是“未定义”时,在后一种情况下,应用程序损坏并显示“无法读取未定义的属性‘getName’”
请注意,在模板中,我可以使用“$store.state.products.mistica.name”直接访问状态值,没有问题,为什么会这样?
我做错了什么,或者更好的是,我不明白什么?
我将 Nuxt 更新到最新版本,因为他们引入了新的fetch()钩子。在我的项目中,我从 Prismic 检索数据。之前,我使用的是asyncData(),但是在导航时,需要一些时间才能渲染页面asyncData()(这就是它的工作原理)。
理想的解决方案是在该特定页面上导航,并在检索数据时显示加载动画。新的fetch()钩子看起来很合适,因为它暴露了$fetchState.pending以便检查操作的状态。
现在,代码(我正在从商店的类别中检索子类别):
data(){
return{
docs: []
}
},
async fetch() {
try{
const res = await this.$prismic.api.query(this.$prismic.predicates.at('my.category.uid', this.$route.params.sub))
const el = res.results[0]
const query = await this.$prismic.api.query([this.$prismic.predicates.at('document.type','sub-category'), this.$prismic.predicates.at('my.sub-category.category', el.id)], { orderings: '[my.sub-category.position, my.sub-category.title]' })
this.docs = query.results
}
catch (e) {
console.log(e)
}
}
Run Code Online (Sandbox Code Playgroud)
这至少在客户端有效。这对于正确的 SSR 有效吗?我的意思是,在asyncData()(在服务器端调用)中,this是不可访问的,data(). asyncData()如果这是正确的解决方案,那么再使用又有什么用fetch()呢?