Мутирующий массив Vuex, который используется в другом компоненте - PullRequest
2 голосов
/ 13 февраля 2020

В первом компоненте у меня есть функция, которая изменяет массив, используя значение, которое хранится в VueX

 methods: {
    //get a function that changes the pickedlist array that is stored in vuex store
    ...mapActions([ 
      'updatePickedDates'
      ]),
    ...mapGetters([
      'dates'
    ]),
    resetArray() {
      this.updatePickedDates(this.dates}
 }

В другом компоненте

Я использую геттер из VueX, который передается этому массив:

 computed: {
    ...mapGetters(["managementNews"])
  }

Однако при запуске функции resetArray() я получаю сообщение об ошибке state.pickedDates.includes is not a function

Вот геттеры и мутации в моем магазине VueX:

 mutations: {
    mutatePickedDates: (state, payload) => {
      state.pickedDates=payload
    }
  },
  actions: {
    updatePickedDates({commit}, payload) {
      commit('mutatePickedDates', payload)
    }
  },
  modules: {
  },
  getters : {
    //get news that are of type management
    managementNews: function(state) {
      return state.news.filter(i => i.type === "management" && state.pickedDates.includes(i.date));
    },
    dates: state => {
      return state.dates
    },
    pickedDates: state => {
      return state.pickedDates
    }
  },

1 Ответ

1 голос
/ 13 февраля 2020

В этом случае this.dates является функцией, а не массивом. Ошибка указывает на то, что она не является неопределенной, но в ней нет метода includes.

mapGetters должен предоставлять методы получения вычисляемых свойств. Нет способа, как mapGetters можно применить к methods и сделать this.dates массивом.

Должно быть:

  methods: {
    ...mapActions([ 
      'updatePickedDates'
    ])
  },
  computed: {
    ...mapGetters([
      'dates'
    ]),
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...