@sibidor
Оцифровка бизнеса

Как применять реактивность при использовании Vuex?

Перерабатываем приложение, переводим его на Vue.js. После разбивки на однофайловые компоненты начали использовать Vuex и возник вопрос - вся прелесть Vue для меня в реактивности данных.
Но Vuex требует использования мутаций, а не прямого изменения данных в Vuex. Как быть?

Пример - в компоненте есть поле chekbox как сделать чтобы данные в него выводились из Vuex и менялись в Vuex? Т.е. была реактивность?

Сделал так - в компоненте вел переменную tmp которая при инициализации в data() получает значение из Vuex объекта state и связывается с chekbox'ом через v-model.
А при событии изменения вызывается метод который изменяет объект Vuex в зависимости от состояния этой временной переменной.

<input type="checkbox" change ="changePrintTwoActs" v-model="tmpActsPrintPages">

data() {
            return {                
                tmpActsPrintPages: this.$store.state.app.actsPrintPages==2 ? true : false
            }
        },
        methods: {
            changePrintTwoActs : function () {
                this.$store.state.app.actsPrintPages = this.tmpActsPrintPages ? 2 : 1;
....

Мне кажется, что это костыль. Как более правильно пользоваться реактивностью Vue при использовании Vuex?
  • Вопрос задан
  • 2462 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Vue.js
Сделайте computed свойство, у которого геттер возвращает значение из vuex, а сеттер - дёргает мутацию:

сomputed: {
  checked: {
    get() {
      return this.$store.state.checked
    },
    set(val) {
      this.$store.commit('updateChecked', val)
    }
  }
}

https://jsfiddle.net/4nkh119u/
Ответ написан
Xuxicheta
@Xuxicheta
инженер
Можно в v-model отдать ссылку прямо на стейт, но лучше через computed. И правильнее и сохранится возможность ослеживать, тестировать и изменять данные.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
muzikant777
@muzikant777
PHP/Vue разработчик
Вдобавок к вышеотписавшимся могу добавить ссылку на достаточно хороший курс по Vuex:
https://vueschool.io/courses/vuex-for-everyone
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
Если не нравится vuex, то есть альтернативы, начиная с простого контейнера https://ru.vuejs.org/v2/guide/state-management.htm... и заканчивая большим списком на гитхабе
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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