报错:[vuex] duplicate getter key: list ——>不同的模块有相同的名字,产生了冲突

文章讲述了在Vue.js应用中,由于不同模块间存在同名的getter键list导致的冲突问题,以及如何通过在Vuex的模块中启用命名空间(namespaced:true)来解决这个问题。这样,当引用子模块如user时,需在mapGetters中指定命名空间,如list:user/list,以正确获取数据。
摘要由CSDN通过智能技术生成

翻译是:重复的 getter 键: list

问题:不同的模块有相同的名字list,产生了冲突

解决:在每个有list命名的模块暴露中加入namespaced:true (启用命名空间)其默认值是false。

加上命名空间之后,如果再想要此文件中的数据,那就必须要带上命名空间才能取到。

之后在引入子模块的index.js中使用modules时,其内就是命名空间的名称。

所以需要在mapGetters的属性值中加入此命名空间。

例如:

user.js:

// 声明state
const state={
    list:[
        {id:1,name:'王硕显',type:'qqVIP'},
        {id:2,name:'王硕显2',type:'VIP'},
        {id:3,name:'王硕显3',type:'VIPPP'},
        {id:4,name:'王硕显4',type:'vvVIP'},
    ]
}

// 声明getters
const getters={
    list(state){
        return state.list
    }
}

// 导出
export default{
    state,
    getters,
    namespaced:true//默认值:false,. true:启用命名空间
}

引入子模块 index.js。 modules中的user是命名空间的名称

import Vue from 'vue'
// 引入vuex
import Vuex from 'vuex'
Vue.use(Vuex)

// 引入子模块
import order from './modules/order'
import user from './modules/user'

// 创建store对象
const store = new Vuex.Store({
    modules:{
        user,//子模块,是命名空间的名称
    }
})

// 导出store
export default store

在User.vue中使用时:list:'user/list' 就必须带上命名空间user才能取到数据

<template>
  <div>
    <h2>会员中心</h2>
    <ul>
      <li v-for="item in list" :key="item.id">
        <div>姓名:{{ item.name }}</div>
        <div>会员级别:{{ item.type }}</div>
      </li>
    </ul>
  </div>
</template>
 
<script>
// 导出辅助函数
import { mapGetters } from 'vuex'
export default {
  computed:{
    ...mapGetters({
      //:左侧自定义属性名 :右侧映射到user下的getters中的方法名
      list:'user/list'
    })
  }
}
</script>

<style>

</style>

结果为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值