@MeMoJlor

Почему не изменяется значение в Vuex?

Есть список с кнопками. По клику на кнопку вызывается мутация, в которою передаётся id. Берется булево свойство cheked у элемента с указанным id, и его значение инвертируется, но в стейте ничего не меняется. Я так понимаю, потому что метод возвращает только false/true, а не измененный item. Как в данной ситуаций грамотно реализовать метод?

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    posts: [
      {txt: '123', cheked: false, id: 40934564356},
      {txt: '321', cheked: true, id: 23546345656},
      {txt: '132', cheked: false, id: 35645645345},
    ]
  },
  mutations: {
    chekedItem(state, id) {
      return state.posts.filter(item => item.id == id)
      .map(item => item.cheked = !item.cheked);
    }
  },
})
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Говнокод конечно, но то, что вы показали - оно рабочее. Проблема где-то в другом месте - может, мутация не вызывается, или при вызове передаёте несуществующий id.

По клику на кнопку вызывается мутация, в которою передаётся id.

Эти слова следовало проиллюстрировать кодом.

Я так понимаю, потому что метод возвращает только false/true, а не измененный item.

Не понимаете. Документацию vuex пытались открывать, или понадёргали огрызков кода из видео на ютубе?

Как примерно должен был выглядеть ваш код. Смотрите, сравнивайте с тем, что у вас реально есть.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Мутации - это синхронные методы, непосредственно меняющие значение свойств. У вас ничего не меняется, потому что .map создаёт новый массив, который никуда не записывается.
mutations: {
  TOGGLE_ITEM: (state, id) => {
    const item = state.posts.find((item) => item.id === id);
    if (item !== undefined) {
      item.checked = !item.checked;
    }
  },
},
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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