@VegasChickiChicki

Как правильно работать с Vuex в данном случае?

Начал изучать Vuex и запутался немного. Суть в том, что есть массив объектов, который находится в "state", так же есть переменная, так же находится в "state", необходимо перебрать массив, узнать сколько в нем переменных со значением "true" и записать в переменную, которая лежит в state.
Вот так выглядит store:
let store = new Vuex.Store({
  actions:{

  },
  mutations:{

  },
  state:{
      favourites: 0,
      blocks:[
          {
              favourite: false,
          },
          {
              favourite: false,
          },
          {
              favourite: true,
          },
          {
              favourite: false,
          },
      ]
  },
  getters:{

  }
});

Не могу понять как отфильтровать массив "blocks", думаю можно через ForEach, что то вроде:
let favourites = function(){
let i = 0;
    blocks.forEach(function (el) {
        if (el.favourite === true){
            i++;
        }
        return i;
    })
};

И не могу понять, как это потом записать в переменную "favourites". Возможно стоит создать какой то метод в мутациях... Прошу помощи, спасибо.

UPD.
Понял, что нужно добавить метод в getters.
Понял какой должна быть функция фильтра:
favourites: state => {
          return state.blocks.filter(block => block.favourite).length;
      }

Но появились еще вопросы, почему она работает, хотя никакого условия фильтрации я не указал, но она возвращает объект из полей, только которые равны true, мы берем его длину соответственно.
И еще вопрос, как обратиться в шаблоне одновременно и к полю computed и к полю getters?
сейчас обращение такое:
import { mapState } from 'vuex';

  export default {
    computed: mapState(['favourites','compare','basket'])
  }


UPD2.
Узнал что такое объектный синтаксис, для объедения объектов использовал следующий способ:
computed:{
          ...mapState(['compare','basket']),
          ...mapGetters(['favourites'])
      }

Вопрос с магией метода filter остается открытым.
  • Вопрос задан
  • 194 просмотра
Решения вопроса 1
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
Вопрос с магией метода filter остается открытым.

У вас есть стрелочная функция: block => block.favourite, которая на входе получает блок, а на выходе возвращает либо true, либо false. Теперь посмотрите как работает метод filter (перебирает все элементы, вызывая колбек, и оставляет только те элементы, которые вернули в колбеке true). Собственно после этого считаем, сколько отфильтрованных по такому условию элементов осталось (.length это делает), магии в этом никакой нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы