Начал изучать 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 остается открытым.