使用 Vuex,为啥 mapGetters 不接受与 mapState 相同的语法?

Posted

技术标签:

【中文标题】使用 Vuex,为啥 mapGetters 不接受与 mapState 相同的语法?【英文标题】:With Vuex, why isn't mapGetters accepting the same syntax as mapState?使用 Vuex,为什么 mapGetters 不接受与 mapState 相同的语法? 【发布时间】:2018-12-08 12:34:25 【问题描述】:

我有一个 Vue 组件,它映射来自 Vuex 商店的状态、突变、动作和 getter。

import mapState, mapMutations, mapActions, mapGetters from 'vuex'
export default 
  name: 'DefaultLayout',
  computed: 
    ...mapState(
      settings: (state) => state.settings,
      language: (state) => state.language
    ),
    ...mapState([
      'changeRouteTo'
    ]),
    ...mapGetters([
      'isLoggedIn'
    ])
  
...

问题是,我无法让...mapGetters 使用显式语法,就像我在上面处理...mapState 的第一个实例时那样。

我试过了

...mapGetters(
  isLoggedIn: (state) => state.getters.isLoggedIn
)

...mapGetters(
  isLoggedIn: (state) => state.isLoggedIn
)

...mapGetters(
  isLoggedIn: (state) => this.$store.getters.isLoggedIn
)

但只有

...mapGetters([
  'isLoggedIn'
])

似乎有效。

【问题讨论】:

【参考方案1】:

要使用...mapGetters 中的对象,语法如下:

...mapGetters(
  isLoggedIn: 'isLoggedIn'
)

其中键是您希望 getter 映射到的名称,值是作为字符串的 getter 名称

【讨论】:

【参考方案2】:

使用 mapGetters,您应该使用 getter 访问状态的某些部分,例如在您的商店中,您将拥有类似的东西

const state = 
  isLoggedIn:''


const getters = 
  isLoggedIn(state) 
    return state.isLoggedIn
   

export default 
  state,
  getters

在您的组件中,您可以像这样访问 isloggedIn 属性

 computed: 
      ...mapGetters(['isLoggedIn'])
    ,

现在您可以访问 isLoggedIn 属性 因为 mapGetters 可以访问 gitters 的 get 函数,它返回存储的一部分,你不必重写 get 函数并将状态传递给它,你应该在 getter 中执行它的逻辑这就是目的

【讨论】:

【参考方案3】:

以上答案都是正确的,虽然他们没有回答“为什么”这个问题? 所以文档也没有回答 - 很遗憾。 让我告诉你我的看法:

VueX getter 应该已经可以做任何你需要的事情了。 你看,VueX 是为大型应用程序设计的。因此,状态或从基本状态(getter)派生的状态很有可能会在多个地方使用。

Getter 已经可以访问 VueX 状态(因为它们是从状态派生的!),它们也已经可以访问其他 VueX getter!

我想说,如果您发现自己需要操作 getter,只需创建另一个执行此操作的 getter - 并简单地导入它。

【讨论】:

以上是关于使用 Vuex,为啥 mapGetters 不接受与 mapState 相同的语法?的主要内容,如果未能解决你的问题,请参考以下文章

Vuex mapGetter的基本使用

在 Vuex 4 和 Vue 3 中使用 `mapActions` 或 `mapGetters`

使用 Vuex mapGetters 时如何修复 TypeScript 错误?

vuex2中使用mapGetters/mapActions报错解决方法

Vuex 反应式 mapGetter 与传递的参数

手写vuex的mapGetters