在使用了TypeScript后,如果项目中用到了vuex,那么可以使用vuex-module-decorators
这个第三方库,引入装饰器。
在使用装饰器之前,还是首先来看看TypeScript中,是怎样使用vuex的。
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
state: {
posts: "这是post"
},
mutations: {
/** 给post赋值 */
SET_POSTS(state, data) {
state.posts = data;
}
},
actions: {
/** 模拟异步获取post的值 */
getPostsData({ commit }) {
setTimeout(() => {
commit("SET_POSTS", "修改post");
}, 3000);
}
},
modules: {}
});
上面的vuex是生成项目时,官方给出的模板。
但是一般来讲,更推荐下面的这种方式,声明一个接口规范state
里面的状态类型:
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
/** 规范state里面状态的类型 */
export interface MainState {
/** 测试用的状态 */
posts: string;
}
export default new Vuex.Store<MainState>({
state: {
posts: "这是post"
},
mutations: {
/** 给post赋值 */
SET_POSTS(state, data) {
state.posts = data;
}
},
actions: {
/** 模拟异步获取post的值 */
getPostsData({ commit }) {
setTimeout(() => {
commit("SET_POSTS", "修改post");
}, 3000);
}
},
modules: {}
});
vuex-module-decorators
首先引入这个库:
npm install vuex-module-decorators
vue3
这个库还是有点厉害的,最近在Vue3中尝试引入这个库。
发现在Vue3中也是可以正常使用。并且表现比在Vue2中更为强大,可以直接在ts
文件调用同步异步方法。
最后
至于使用vuex-module-decorators
的好处嘛,就是拥有更好的类型推断,因为在往常的vuex写法在.vue
文件中通过this.$store.dispatch("方法名")
进行调用时,是没有代码提示的,所以有些人也会使用声明常量的方式来获取代码提示。
但是!在WebStorm中,这种调用方法已经拥有代码提示,所以声明常量的方式也就不必要了。
this.$store.commit("方法名")
也是同样的~
所以如果你用的是WebStorm,其实用不用vuex-module-decorators
都能够获得代码提示。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!