VueX 突变有效,但组件计算 属性 无效
VueX mutation works, but component computed property doesn't
我已经阅读了很多关于这个问题的问答,但我似乎没有做任何前面描述的问题。
我已经开始为我的状态使用模块,但是在设置好所有内容之后,我可以看到商店模块的本地状态和 getter 都得到了更新。但是计算出的 属性 没有。我不知道为什么会这样,所以我在这里寻求帮助。
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
,它没有改变。正如您从开发工具中看到的那样,突变会发生并改变本地状态和 getter。但是当我查看组件时,计算的 vuex 绑定没有改变。
问题是我在我的商店和我的 webpack 包中使用不同的 Vue 可执行文件。
我到处都用import Vue from 'vue/dist/vue.esm'
,但在store
我用import Vue from 'vue'
。确保它们相同后,一切正常。
我已经阅读了很多关于这个问题的问答,但我似乎没有做任何前面描述的问题。
我已经开始为我的状态使用模块,但是在设置好所有内容之后,我可以看到商店模块的本地状态和 getter 都得到了更新。但是计算出的 属性 没有。我不知道为什么会这样,所以我在这里寻求帮助。
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
,它没有改变。正如您从开发工具中看到的那样,突变会发生并改变本地状态和 getter。但是当我查看组件时,计算的 vuex 绑定没有改变。
问题是我在我的商店和我的 webpack 包中使用不同的 Vue 可执行文件。
我到处都用import Vue from 'vue/dist/vue.esm'
,但在store
我用import Vue from 'vue'
。确保它们相同后,一切正常。