Vue3 Composition 组合式API+TypeScript使用Vuex

首先 需要一个vue3项目
如果你还在用vue2的项目 可以看一下我的文章
将vue2项目升级成vue3项目
然后我们的项目需要集成TypeScript
可以参考我的文章
vue3项目集成TypeScript

然后我们在项目终端引入vuex

npm install vuex@next --save

正常vue项目中 我们要在src下创建一个 store.js
但我们这个项目集成了ts 所以 我们要在 src下创建一个 store.ts

普通的vue项目 store的代码是这样

import { createStore } from "vuex";

const store = createStore({
    state() {
        return {
            count: 1
        }
    },
    mutations: {
        increment(state) {
            state.count = (state.count+1)
        },
    }
})

export default store;

但如果你用的是ts格式的语法 这样是会编译报错的
ts项目中

store.ts 参考代码如下

import { ComponentCustomProperties } from "vue";
import { createStore,Store } from "vuex";

declare module "@vue/runtime-core"{
    interface State {
        count: number
    }

    interface ComponentCustomProperties {
        $store: Store<State>
    }
}

const store = createStore({
    state() {
        return {
            count: 1
        }
    },
    mutations: {
        increment(state:any):void {
            state.count = (state.count+1)
        },
    }
})

export default store;

interface State是定义了一个State接口 里面限制 必须有一个count变量 且要是数字类型的
这里是可以往里加变量的 当然 接口加了 你实现接口的数据就必须有一样的数据 且要是一样的类型

然后我们在 main.ts中引入store.ts中的vuex
然后挂载在项目上

import { createApp } from 'vue'
import App from './App.vue'
import store from './store'

createApp(App).use(store).mount('#app')

然后重启项目

如果可以正常跑起来就没问题了
在这里插入图片描述
然后我们在组件中使用vuex

<template>
  <div>
     {{ countData }}
  </div>
</template>

<script lang="ts">
import {useStore} from "vuex";
import { defineComponent,ref } from 'vue';
export default defineComponent({
 setup(){
    const {state} = useStore();
    let countData = computed(():number=>{
      return state.count
    })
    return {
      countData
    }
 }
});
</script>

这里我们引入vuex的 useStore方法
在useStore中取出state对象
然后用countData变量 通过ref 响应式定义state中的count
然后返回countData 并在界面中使用
运行结果如下
在这里插入图片描述
没有任何问题

然后我们试着调用vuex中的方法

<template>
  <div>
     {{ countData }}
     <button @click = "onCountData">increment</button>
  </div>
</template>

<script lang="ts">
import {useStore} from "vuex";
import { defineComponent,ref,computed } from 'vue';
export default defineComponent({
 setup(){
    const {commit,state} = useStore();
    const onCountData = function():void {
        commit('increment');
    }
    let countData = computed(():number=>{
      return state.count
    })
    return {
      countData,
      onCountData
    }
 }
});
</script>

这里 我们多拿了一个commit 这个工具里就有我们mutations中的方法
然后我们定义了onCountData函数 调用了vuex中的increment

并把他绑定给了一个按钮

运行结果如下
在这里插入图片描述
然后我们点击按钮 点一次vuex中的 count 就会加一
在这里插入图片描述
也是没有任何问题

然后我们试着做个传参的
来到store.ts 将 increment改成

increment(state:any, value:number):void {
    state.count = (state.count + value)
 },

这里我们就可以看到 多接受了一个叫vulue的数字类型参数
并点一次 不再是加一 而是count 和传过来的value相加
然后我们在组件中onCountData代码改成

const onCountData = function():void {
    commit('increment',33);
}

这里我们参数直接传了33 那点一下就是count 自身加33

点一下按钮 运行结果如下
在这里插入图片描述
也是没有任何问题

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3.0来了,你还学的动吗? 2020年9月底,Vue3.0正式版终于发布了。Vue在全球拥有 130 多万用户 ,它被应用于各种不同的场景中。而在国内,更是最火热的前端框架,2.0与3.0的开发模式有了很大的改变,所以3.0的全新版本势必会引发新的一波学习潮流。对于前端开发者来说,不管你嘴上如何“学不动”,注定离不开“真相定律”,Vue3.0是你提升自身技术能力,晋升中级工程师一定要掌握的。  本课程将基于 Vue3.0 正式版,从Vue基础语法入手,全面掌握 Vue3.0 全家桶技术栈,并结合实战项目开发,让你拥有Vue3.0项目开发经验,更好的掌握Vue开发企业项目的流程 。 本课程共包括三个模块 一、Vue基础篇 本模块将讲解Vue3.0基本用法、插值表达式、常用指令等知识点,还会精讲Vue 3.0核心语法,如计算属性、过滤器、监视器、模板、生命周期等内容。会带你深入理解Vue组件化技术,讲解全局组件和局部组件的定义,组件间数据传递,以及Vue内置组件等知识点。让你掌握模块化的概念,会通过Vue脚本架搭建项目,并掌握使用Axios发送AJAX请求,让你快速入门Vue3.0。 二、Vue核心篇 这个模块会带你讲解Vue3.0全家桶的知识点(Vue Router路由+Vuex状态管理),涉及Vue路由的用法、包括路由嵌套、路由模式、编程式导航、路由守卫等,还会全面讲解Vuex状态管理机制及使用,理解state、mutation、action等核心概念,让你轻松掌握Vue全家桶。 三、项目实战篇 实战项目会贴近企业流程,按照企业级别代码质量和工程开发流程进行授课,让你理解这套技术在企业中被使用的真实流程,更好的掌握Vue各个基础知识点。项目开发流程包括项目需求分析->环境搭建与配置->搭建远程Git仓库->接口分析->项目开发->打包上线。实战项目涉及内容

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值