Getter 应该是一个函数但是 "getters.doubleCounter" 是 20 - VUEX 错误
Getter should be a function but "getters.doubleCounter" is 20 - VUEX ERROR
我现在正在学习 Vuex,但 运行 遇到了一些麻烦。尝试在我的 vuex 实例上创建 getter
时,我在尝试从我的组件之一进行渲染时遇到此错误:
Getter should be a function but "getters.doubleCounter" is 20
store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
counter: 10
},
getters: {
doubleCounter: state => {
return state.counter * 2;
}
}
});
我的组件:
<template>
<div>
<p>This is a message from services</p>
<button v-on:click="increment">+</button>
<button v-on:click="decrement">-</button>
{{ counter }}
</div>
</template>
<script>
export default {
computed: {
counter() {
return this.$store.getters.doubleCounter;
},
},
methods: {
increment: function () {
this.$store.state.counter++
},
decrement: function () {
this.$store.state.counter--
}
}
}
</script>
当我尝试呈现此组件所在的页面时再次出现。在控制台中给我标题错误消息时失败。任何帮助都会很棒!谢谢!
我不确定是什么导致了你的错误,但你肯定不打算在 突变 .
之外直接操纵 state
您的代码绝不应将任何内容直接分配给 state
属性。比如这个不好
this.$store.state.doubleCounter++
这是你应该拥有的。
Vue.component('counter', {
template: `
<div>
<p>This is a message from services</p>
<button v-on:click="increment">+</button>
<button v-on:click="decrement">-</button>
{{ counter }}
</div>
`,
computed: {
counter() {
return this.$store.getters.doubleCounter;
},
},
methods: {
increment: function () {
this.$store.commit('increment')
},
decrement: function () {
this.$store.commit('decrement')
}
}
})
const store = new Vuex.Store({
state: {
counter: 10
},
mutations: {
increment(state) { state.counter++ },
decrement(state) { state.counter-- }
},
getters: {
doubleCounter: state => {
return state.counter * 2;
}
}
})
new Vue({
el: '#app',
store
})
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script>
<script src="https://unpkg.com/vuex@3.0.1/dist/vuex.js"></script>
<div id="app"><counter/></div>
试试这个。
doubleCounter: (state) => {
return state.counter * 2;
}
我现在正在学习 Vuex,但 运行 遇到了一些麻烦。尝试在我的 vuex 实例上创建 getter
时,我在尝试从我的组件之一进行渲染时遇到此错误:
Getter should be a function but "getters.doubleCounter" is 20
store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
counter: 10
},
getters: {
doubleCounter: state => {
return state.counter * 2;
}
}
});
我的组件:
<template>
<div>
<p>This is a message from services</p>
<button v-on:click="increment">+</button>
<button v-on:click="decrement">-</button>
{{ counter }}
</div>
</template>
<script>
export default {
computed: {
counter() {
return this.$store.getters.doubleCounter;
},
},
methods: {
increment: function () {
this.$store.state.counter++
},
decrement: function () {
this.$store.state.counter--
}
}
}
</script>
当我尝试呈现此组件所在的页面时再次出现。在控制台中给我标题错误消息时失败。任何帮助都会很棒!谢谢!
我不确定是什么导致了你的错误,但你肯定不打算在 突变 .
之外直接操纵state
您的代码绝不应将任何内容直接分配给 state
属性。比如这个不好
this.$store.state.doubleCounter++
这是你应该拥有的。
Vue.component('counter', {
template: `
<div>
<p>This is a message from services</p>
<button v-on:click="increment">+</button>
<button v-on:click="decrement">-</button>
{{ counter }}
</div>
`,
computed: {
counter() {
return this.$store.getters.doubleCounter;
},
},
methods: {
increment: function () {
this.$store.commit('increment')
},
decrement: function () {
this.$store.commit('decrement')
}
}
})
const store = new Vuex.Store({
state: {
counter: 10
},
mutations: {
increment(state) { state.counter++ },
decrement(state) { state.counter-- }
},
getters: {
doubleCounter: state => {
return state.counter * 2;
}
}
})
new Vue({
el: '#app',
store
})
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script>
<script src="https://unpkg.com/vuex@3.0.1/dist/vuex.js"></script>
<div id="app"><counter/></div>
试试这个。
doubleCounter: (state) => {
return state.counter * 2;
}