Vue.js Vuex 模块问题: 在_mapGetters()中 getters 应该是函数

Vue.js Vuex 模块问题: 在_mapGetters()中 getters 应该是函数

在本文中,我们将介绍Vue.js中使用Vuex时遇到的一个常见问题:在_mapGetters()中,getters应该是一个函数。

阅读更多:Vue.js 教程

问题描述

在Vue.js中使用Vuex时,可以通过_getters()方法来获取store中的getter。对于简单的getter,我们可以直接在computed属性中使用_mapGetters()辅助函数进行映射。然而,当我们的getter需要接受参数时,我们需要将getter定义为一个函数。否则,我们会遇到一个常见的问题,即无法正确映射getter。

问题示例

让我们假设有一个Vuex模块,名为userModule,其中包含一个getter,用于根据用户ID获取用户信息。这个getter需要接受一个参数,即用户ID。

// userModule.js

const state = {
  users: [
    { id: 1, name: 'John' },
    { id: 2, name: 'Jane' },
    { id: 3, name: 'Bob' }
  ]
}

const getters = {
  getUserById: (state) => (id) => {
    return state.users.find(user => user.id === id)
  }
}

export default {
  state,
  getters
}
JavaScript

现在,让我们在Vue组件中使用这个getter:

import { mapGetters } from 'vuex'

export default {
  computed: {
    ...mapGetters('userModule', {
      user: 'getUserById'
    })
  }
}
JavaScript

当我们在Vue组件中运行时,我们会发现这样的错误信息:[vuex] getters should be function but "getUserById" in module "userModule" is {}

解决方法

为了解决这个问题,我们需要将getter定义为一个函数。在getter定义中,我们可以通过返回一个新的函数来接受参数。

修改userModule.js中的getters:

const getters = {
  getUserById: (state) => (id) => {
    return state.users.find(user => user.id === id)
  }
}
JavaScript

通过在getter定义中返回一个新的函数,我们可以将参数传递给这个函数,并正确获得我们需要的getter结果。

解决方法示例

现在,让我们再次使用修复后的getter。

import { mapGetters } from 'vuex'

export default {
  computed: {
    ...mapGetters('userModule', {
      user: 'getUserById'
    })
  },
  created() {
    console.log(this.user(2)) // 输出: { id: 2, name: 'Jane' }
  }
}
JavaScript

运行这个Vue组件,我们将正确地打印出用户ID为2的用户信息:{ id: 2, name: 'Jane' }

总结

在使用Vue.js中的Vuex时,当我们的getter需要接受参数时,在_mapGetters()中映射getter时应该将getter定义为一个函数。这样做可以确保我们能够正确地获得我们需要的结果,避免出现错误。

通过本文的示例和解决方法,我们希望能够帮助您解决在使用Vue.js和Vuex过程中遇到的getter映射问题。祝您编写愉快的Vue.js应用程序!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

VueJS 精品教程

登录

注册