例如用TypeScript+VueX实现简单的点击实现加1功能
1.写入state和mutations /src/store/index.js文件代码如下
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex) // 把store 绑到 Vue.prototype
export default new Vuex.Store({
// 相当于vue中的data
state: {
count: 0,
},
//相当于vue中的methods
mutations: {
vuexAdd(state) {
state.count ++
},
},
})
2.于main.ts中加载store文件夹
import Vue from 'vue'
import App from './App.vue'
import store from './store'
new Vue({
store,
render: (h) => h(App),
}).$mount('#app')
3.于test.vue中使用
<template>
<div>
{{ count }}
<button @click="add">点我+1</button>
</div>
</template>
<script lang="ts">
import Vue from 'vue'
import { Component } from 'vue-property-decorator'
import Button from '@/components/Button.vue'
@Component({
computed: {
//我们在使用Vuex中的数据,最好定义在computed计算属性中,这样变动可以即时更新
count() {
//使用了Vuex的state
return this.$store.state.count
},
},
})
export default class test extends Vue {
add() {
// 使用了Vuex的mutations中定义的vuexAdd方法实现+1功能
this.$store.commit('vuexAdd')
}
}
点击后:
上面出现了一个问题,这在computed里拿出来的Vuex数据只能在template摸板中使用,在下方script里面使用就会报错,查阅文档半个小时后在Vue Class Component找到解决办法,就是利用ES6的get方法
所以我们的
computed: {
//我们在使用Vuex中的数据,最好定义在computed计算属性中,这样变动可以即时更新
count() {
//使用了Vuex的state
return this.$store.state.count
},
}
要放到下面中,变成
export default class test extends Vue {
get count() {
//使用了Vuex的state
return this.$store.state.count
}
add() {
// 使用了Vuex的mutations中定义的vuexAdd方法实现+1功能
this.$store.commit('vuexAdd')
}
}