typescript vuex_vue进阶系列——用typescript玩转vue和vuex

用过vue的朋友大概对vuex也不陌生,vuex的官方解释是专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。说的简单点就是对vue的状态进行统一管理,如下图介绍了其管理模式:

1325430f61c44013b827e20ce74ab8b0

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。

最简单的使用方法长这样的:

// 如果在模块化构建系统中,请确保在开头调用了 Vue.use(Vuex)const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }})

如果项目中需要管理的状态很多,也可以将这些方法按文件分开,最后挂载在index文件下:

// state.jsexport default { total: 0}// mutaction.jsexport default { add(state){ state++ }}// action.jsexport default { addAsync(context){ setTimeout(() => { context.commit('add'); }, 1000); }}

最后统一导入到index.js

// index.jsimport Vue from 'vue';import Vuex from 'vuex';import { state } from './state';import mutations from './mutation';import actions from './action';Vue.use(Vuex);export default new Vuex.Store({ state, mutations, actions,});

完毕,这就是基本的vuex的开发模式。接下来,我不会过多介绍vuex的用法,而是介绍如何基于typescript,用class的方式来使用vue和vuex进行项目开发,相信使用过react的朋友们对class的写法不会陌生,那就让我们开始吧!

为了省去一些配置上的麻烦,我们直接采用vue-cli3来搭建项目。在创建项目的时候选中typescript即可。

fd299af1a7794db694f52bb624ea23b3

创建完项目之后,我们对项目结构进行调整,使其更易于维护和管理,如下:

646fa3a1e33940e7802cebb2dcdd6551

接下来开始我们的代码编写,首先关注store目录,这是我们管理项目状态的地方,我们将state改写成typescript的方式:

export interface State { name: string; total: number; isLogin: boolean; postList: object[];}export const state: State = { name: '', total: 0, isLogin: false, postList: [],};

如果对typescript不熟悉的同学,可以移步到typescript官网去了解基本用法。

action文件和之前没有太大变化,只是增加了类型定义和参数

export default { asyncAdd(context: any, paylod: any) { setTimeout(() => { context.commit('add', paylod.num); }, 1000); },};

下面是mutaction文件:

import { State } from './state';export default { add(state: State, payload: any) { payload ? (state.total += payload) : state.total++; },};

说到这里,有必要简单讲解一下action和mutaction的区别:

Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态。Action 可以包含任意异步操作。
  • 说简单点就是mutation用于同步执行,action用于异步执行,可以多重分发mutation。

完成了这些,vuex的工作大致告于段落,接下来我们关注的重点就是页面组件和如何在组件中使用vuex。

// home.vue
{{name}}
同步增加总数:{{total}}
异步增加总数:{{total}}

相信用过react的朋友对这种写法并不陌生,其实vue完全可以将模版写法改写成jsx的方式,就好比写react的jsx文件一样,后面我会推出一篇文章,专门介绍如何使用jsx+class的方式开发vue组件。

vue-cli3已经为我们安装了是支持class和装饰器的模块vue-property-decorator,当然想自己配置的朋友也可以通过webpack自己配置,无限可能,我也会在后面推出关于webpack的文章,教大家如何玩转webpack4.0。

使用class方式创建组件和传统的方式有点区别:1.一般我们定义data作为数据源,在class中我们可以直接定义属性,即可作为初始数据;2.vue实例方法一般定义在methods中,用类组件时,可以直接使用组件方法。

最后,我们可以用vuex提供的commit和dispatch来触发我们状态的变化,至此,一个class版的vue组件就写好啦,如有不懂的地方或者文章没有考虑到的地方,欢迎随时指出。欢迎交流更多前端知识,经验。

接下来即将推出的文章:

1.玩转webpack4.0

2.typescript实用知梳理

3.react+redux+redux+trunk+immutable实战总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值