【发布时间】:2022-01-21 04:15:06
【问题描述】:
我将导航项存储在我的 Vuex 存储中,并以 Vue/Bulma 组件的形式对它们进行迭代以进行条件输出,如下所示:
<b-navbar-item
v-for='(obj, token) in $store.state.nav'
v-if='privatePage'
class=nav-link
tag=NuxtLink
:to=token
:key=token
>
{{obj.text}}
</b-navbar-item>
如图所示,只有当组件的 privatePage 数据项解析为 true 时才应输出,它确实如此:
export default {
data: ctx => ({
privatePage: ctx.$store.state.privateRoutes.includes(ctx.$route.name)
})
}
我遇到的问题是当我运行开发服务器(使用ssr: false)时,当我通过NuxtLink 标签导航到页面时,组件最初并没有显示。如果我手动导航到页面或刷新它,组件就会显示。
我以前在 Nuxt 看到过这种情况,但不确定是什么原因造成的。有人知道吗?
【问题讨论】:
-
首先,您不应按照文档中的说明同时使用
v-if和v-for。数据也是如此,请在此处使用return。检查您的控制台中是否有任何错误或来自 ESlint 的错误。您可以使用 Vue devtools 检查您的页面以查看问题所在(Vuex、本地状态等)。不要忘记为所有道具/属性使用双引号,并且请不要在您的案例中使用v-for(命名为token)的索引。或许可以为我们提供一些minimal reproducible example 以便更快地调试! -
谢谢@kissue。我的
data确实有一个隐含的return- 这只是我使用箭头函数语法。出于兴趣而不使用index作为密钥的原因是什么? -
您正在失去使用
this设置一些数据的能力。此外,return对于不具有跨组件共享状态很重要。至于v-for中的index,这里是an article,说明为什么这与它应该做的相反。 -
谢谢。但是我仍然对 return 感到困惑——我正在使用 return,只是一个隐式的,以箭头函数的形式。即
ctx => ({...})与ctx => { return {...}; }相同 -
对不起,我误会了你。你说得很对。谢谢。
标签: javascript vue.js components nuxt.js