Мутация VueX работает, но вычисляемое свойство компонента не работает

Я прочитал много вопросов и ответов по этой проблеме, но, похоже, я не решаю ни одну из проблем, описанных ранее.

Я перешел к использованию модулей для своих состояний, но после настройки всего я вижу, что обновляется как локальное состояние модуля хранилища, так и получателя. Но вычисленное свойство не делает. Я не могу понять, какого черта это происходит, поэтому здесь я ищу помощи.

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import base_states from './modules/base_states'
import dialogs from './modules/dialogs'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    base_states,
    dialogs,
  },
})

dialogs.js

// initial state
const state = {
  signInModalDialogComponent: 'signOn',
  attendanceModalDialogComponent: 'AttendanceDetails',
  dialogSignInVisible: false,
  dialogDonationVisible: false,
}

// getters
const getters = {
  signInModalDialogComponent: state => state.signInModalDialogComponent,
  attendanceModalDialogComponent: state => state.attendanceModalDialogComponent,
  dialogSignInVisible: state => state.dialogSignInVisible,
  dialogDonationVisible: state => state.dialogDonationVisible,
}

// actions
const actions = {}

// mutations
const mutations = {
  changeComponent(state, data){
    state.signInModalDialogComponent = data
  },
  changeAttendanceComponent(state, componentName){
    state.attendanceModalDialogComponent = componentName
  },
  toggleSignInVisibility(state, data){
    state.dialogSignInVisible = data
  },
  changeDonationVisibility(state, data){
    state.dialogDonationVisible = data
  },
}

export default {
  state,
  getters,
  actions,
  mutations
}

компонент (я вынул кучу кода, который не связан)

<template lang="pug">
...
    el-dialog(width='300px', :visible.sync='dialogSignInVisible')
      component(
        :is='signInModalDialogComponent',
        @componentchanged='dialogComponent = $event'
      )
</template>

<script type="text/javascript">
  import { mapGetters, mapMutations } from 'vuex';
  export default {
    computed: {
      ...mapGetters([
        'dialogSignInVisible',
        'signInModalDialogComponent',
      ]),
    },
    methods: {
      ...mapMutations([
        'toggleSignInVisibility'
      ]),
    }
  }
</script>

В частности, я смотрю на dialogSignInVisible который не меняется. Как видно из инструментов разработчика, мутация проходит и меняет как локальное состояние, так и геттер. Но когда я смотрю на компонент, вычисленная привязка vuex не меняется.

1 ответ

Решение

Проблема заключалась в том, что я использовал другой исполняемый файл Vue в моем магазине против моего пакета веб-пакетов.

я использую import Vue from 'vue/dist/vue.esm' везде, но в store я использовал import Vue from 'vue', Убедившись, что они одинаковые, все заработало без проблем.

Другие вопросы по тегам