Vue.js 修改反应状态属性时Vuex冻结
我是Vuex的新手,遇到了一个无法诊断的问题。我的商店的设置与类似,我在下面包含了相关模块 当应用程序加载时,会调用Vue.js 修改反应状态属性时Vuex冻结,vue.js,vuex,Vue.js,Vuex,我是Vuex的新手,遇到了一个无法诊断的问题。我的商店的设置与类似,我在下面包含了相关模块 当应用程序加载时,会调用INIT操作,并且一切正常。LOOKUP操作稍后从组件调用,但在调用define时冻结 当前代码是在尝试了几个变通方法之后编写的。最终,我尝试从组件访问state.pages。我认为问题可能是因为state.pages是一个对象,所以我将其设置为非反应式,并尝试让组件监视pageCounter中的更改以检索新页面,但这不起作用 我可以包括任何其他相关信息 编辑:简化代码以更具体地显
INIT
操作,并且一切正常。LOOKUP
操作稍后从组件调用,但在调用define
时冻结
当前代码是在尝试了几个变通方法之后编写的。最终,我尝试从组件访问state.pages
。我认为问题可能是因为state.pages
是一个对象,所以我将其设置为非反应式,并尝试让组件监视pageCounter
中的更改以检索新页面,但这不起作用
我可以包括任何其他相关信息
编辑:简化代码以更具体地显示问题所在
store/modules/flashcards.js
// initial state
const state = () => ({
counter: 0,
})
// actions
const actions = {
}
// mutations
const mutations = {
increaseCounter(state) {
console.log(state.counter)
state.counter++; <----------- Code stops here
console.log(state.counter)
}
export default {
namespaced: true,
state,
getters,
actions,
mutations
}
//初始状态
常量状态=()=>({
柜台:0,,
})
//行动
常量动作={
}
//突变
常数突变={
递增计数器(状态){
console.log(state.counter)
state.counter++;state.flashcards.counter
})
},
方法:{
…映射突变('flashcards',['increaseCounter']),
在increaseCounter
中,第一个console.log(state.counter)
已打印,但第二个未打印。这是一个非常简单的访问模式,因此我希望能够深入了解它产生此错误的原因。我发现了问题所在。创建Store对象时使用了strict
标志。删除该标志后,一切都正常了。正如Tordek所说,不要这样做
我想我需要知道为什么这是一个问题,因为它指出了在一个突变之外被操纵的状态。
这不是一个固定的问题。如果你的代码在<代码>严格的< /COD>标志被启用时失败了,你的代码中有一些无效的访问模式。谢谢,我应该把我的答案写得更好。我不认为这是一个真正的修复。意思是,但它帮助我暂时继续,直到我找到无效访问模式的位置。首先,请注意,您最初的状态
不包含页面
元素。这非常可疑。第二,请显示访问状态.pages
的代码。该代码正在修改某些内容,并触发我删除了页面
,取而代之的是页面计数器
,以简化调试。我进一步简化了代码,这反映在原始问题中。我仍然得到了错误。
<template>
<div>
<md-button @click='increaseCounter'>Test</md-button>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import FlashCardComponent from './FlashcardComponent'
export default {
computed: {
...mapState({
counter: state => state.flashcards.counter
})
},
methods: {
...mapMutations('flashcards', ['increaseCounter']),
</script>