Dictionary 在Vuex状态内部使用映射

Dictionary 在Vuex状态内部使用映射,dictionary,state,vuex,Dictionary,State,Vuex,我正在构建一个原型模块来了解Vuex,遇到了一个看似简单的问题——我在使用Map作为状态变量时遇到了问题 我想使用Vuex跨多个模块存储一些基本的用户首选项,并认为Map是一种简单的方法,因为pref可以作为简单的键/值对处理。但我要么没有正确定义映射,要么在突变中没有正确使用它 <script lang="ts"> import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new V

我正在构建一个原型模块来了解Vuex,遇到了一个看似简单的问题——我在使用
Map
作为状态变量时遇到了问题

我想使用Vuex跨多个模块存储一些基本的用户首选项,并认为
Map
是一种简单的方法,因为pref可以作为简单的键/值对处理。但我要么没有正确定义
映射,要么在突变中没有正确使用它

<script lang="ts">
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    userSettings: Map,
  },
  mutations: {
    addUserSetting(state, payload) {
      if (state.userSettings == null) {
        state.userSettings = new Map();
      }
      state.userSettings.set(payload.key, payload.value);
    }

  },

})


</script>

从“Vue”导入Vue;
从“Vuex”导入Vuex;
Vue.use(Vuex);
导出默认的新Vuex.Store({
声明:{
userSettings:Map,
},
突变:{
addUserSetting(状态、有效负载){
如果(state.userSettings==null){
state.userSettings=newmap();
}
state.userSettings.set(payload.key、payload.value);
}
},
})

我愿意使用另一个对象,我从一个
UserPref
对象数组开始,但这也不太顺利。

Vue 2没有对
Map
的适当支持

假设键是字符串,我建议改为使用对象。要获得一个完全空的对象(没有继承的属性,甚至没有
toString
),您可以使用
object.create(null)
,或者如果不需要,只使用
{}
的普通对象

e、 g

从“Vue”导入Vue
导出默认的新Vuex.Store({
声明:{
userSettings:Object.create(空),
},
突变:{
addUserSetting(状态、有效负载){
设置(state.userSettings、payload.key、payload.value);
}
}
})

添加属性时必须使用
Vue.set

我不相信Vue 2对
Map
set
的反应性有任何支持。这并不意味着它们不能被使用,但它们不会对变化做出响应。关于问题的性质,您没有提供足够的详细信息。您必须知道这是否相关。很抱歉,我更新了问题以包含特定的错误消息。哦,我明白了,这是一个TypeScript错误,而不是Vue错误。我不知道任何类型的脚本,但通过谷歌搜索,我认为您可能需要将
userSettings:Map
更改为其他内容,可能是
userSettings:newmap()
。当前,您正在将
Map
constructor函数指定为
userSettings
的初始值。这肯定会修复错误,但如何使用它处理对象集合?我使用Map的最初目标是拥有一个可搜索或可过滤的用户偏好集合。我该如何添加额外的pref或稍后检索它们?@KrisKramer我不明白你在问什么。对象允许键/值对,与问题中使用的
Map
相同。我不清楚为什么使用对象会阻止您过滤、搜索、添加或检索值。