我是Vue和Nuxt的新手,我正在用这些框架以通用模式构建我的第一个网站.

我对nuxtstore 的运作方式有点困惑,因为按照官方文件我无法实现我的 idea .

在我的store 文件夹中,我现在只放了一个名为"products.js"的文件,在那里我导出如下状态:

export const state = () => ({

  mistica: {
    id: 1,
    name: 'mistica'
    }
})

(为了提供更清晰的解释,对对象进行了简化)

在同一个文件中,我设置了一个简单的getter,例如:

export const getters = () => ({

    getName: (state) => {
      return state.mistica.name
    }
})

现在,根据文档,在我设置的组件中:

computed: {
 getName () {
  return this.$store.getters['products/getName']
 }
}

或者(不知道该用什么):

computed: {
 getName () {
  return this.$store.getters.products.getName
 }
}

但当在模板中使用"getName"时是"undefined",在后一种情况下,应用程序被 destruct ,并显示"无法读取undefined的'getName'属性"

注意,在模板中,我可以通过"$store.state.products.mistica.name"直接访问状态值,没有问题,为什么?

我做错了什么,或者更好,我不明白什么?

推荐答案

将工厂函数用于state是一个错误.js功能.它在SSR模式下用于 for each 客户端创建新状态.但对于getters来说,这是没有意义的,因为这些都是纯粹的状态函数.getters应该是普通对象:

export const getters = {
  getName: (state) => {
    return state.mistica.name
  }
}

在这种变化之后,积极进取的人应该会工作.


然后你可以在你的组件中使用this.$store.getters['products/getName'].

不能使用this.$store.getters.products.getName,因为这是不正确的语法.

但要获得更简单、更干净的代码,可以使用vuex中的mapGetters帮助程序:

import { mapGetters } from "vuex";

...

computed: {
  ...mapGetters("products", [
    "getName",
    // Here you can import other getters from the products.js
  ])
}

Vue.js相关问答推荐

具有VUE身份验证的Azure AD

Vue Datepicker 不会在渲染时显示默认日期

如何通过 setup() 发出多个参数?

如何在vue中获取特定类别的产品列表

使用 Vue.js 将文件输入绑定到按钮

如何使用 Vue 命名插槽呈现静态内容列表?

如何将 Nuxt.js 更新到最新版本

导入没有 .vue 扩展名的 *.vue 文件时出现以下错误?

如何在 Vue.js 中传递 $router.push 中的数据?

如果我观看解构的props,Vue 3 手表将无法正常工作

NuxtServerInit 在 Vuex 模块模式下不起作用 - Nuxt.js

Vue 动态组件事件绑定

是否可以从 vue-devtools 中排除 vue 事件和 vuex Mutations?

Import Unexpected identifier + SyntaxError: Unexpected string

Vue CLI 3 sass-resources-loader - Options.loaders 未定义

Vue在按钮单击时添加一个组件

emit更新数组不起作用

如何在 NuxtJS 中设置全局 $axios 标头

vuejs 中缺少 webpack 配置

使用 vue.js 获取调用元素