Использование карты внутри государства Vuex - PullRequest
0 голосов
/ 16 октября 2019

Я создаю модуль-прототип, чтобы узнать о Vuex и сталкиваюсь с тем, что кажется простой проблемой - у меня возникают проблемы с использованием Map в качестве одной из моих переменных состояния.

Я хочу использовать Vuex для хранения некоторых основных пользовательских настроек в нескольких модулях и подумал, что Map будет простым способом сделать это, поскольку префы можно обрабатывать как простой ключ /пары значений. Но я либо неправильно определяю Map, либо неправильно использую его в мутациях.

<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>

Я бы хотел использовать другой объект, и я начал с массиваиз UserPref объектов, но это тоже не очень хорошо.

1 Ответ

1 голос
/ 16 октября 2019

Vue 2 не имеет надлежащей поддержки Map.

Предполагая, что ваши ключи являются строками, я предлагаю вместо этого использовать объект. Чтобы получить полностью пустой объект (без унаследованных свойств, даже не toString), вы можете использовать Object.create(null) или просто использовать обычный объект, используя {}, если это кажется ненужным.

например

import Vue from 'vue'

export default new Vuex.Store({
  state: {
    userSettings: Object.create(null),
  },
  mutations: {
    addUserSetting(state, payload) {
      Vue.set(state.userSettings, payload.key, payload.value);
    }
  }
})

Vue.set должен использоваться при добавлении свойств.

...