index.ts
// todo 1、 引入资源import { createStore } from "vuex";// todo 2、创建一个新的store实例const store = createStore({//modules: 用于数据分块modules: {// key:value key数据块名称 value vuex构成部分:state,actions,mutationscountStore: {// 只分类,没起名namespaced: true, // namespaced 命名空间 使countStore成为它们名字state: {// state是数据 一定是个对象【单一数据源】 好管理n: 1,},actions: {// actions 也是一个对象 里面放置的是方法,这个方法的作用是创建动作然后发送给mutations// actions中的方法有两个参数 第一个参数是store,第二个参数是组件发送过来的信息increment(store, data) {const action = {// type: 动作类型[一般用常量表示]// payload: 组件传递过来的参数type: "INCREMENT",payload: data.val,};// 动作创建完成后 通过commit 发送action动作给mutationsstore.commit(action);},decrement(store, data) {const action = {type: "DECREMENT",payload: data.val,};store.commit(action);},},mutations: {// mutations也是对象,里面放置的是方法 。这个方法的方法名就是actions发送过来的action的typeINCREMENT(state, action) {// state 就是我们的数据源// action 就是actions发送过来的actionstate.n += action.payload;},DECREMENT(state, action) {state.n -= action.payload;},},},},});// todo 3、导出storeexport default store;// 去main.ts
mian.ts
import { createApp } from 'vue'import App from './App.vue'// 激活storeimport store from './store'// todo 4、通过use方法来激活store这个单例// createApp(App).mount('#app')createApp(App).use(store).mount('#app')// 去App.vue
App.vue
<template><div><p>{{n}}</p><select name="" id="" v-model="val"> <!-- 为下面value的值 --><option value="10">10</option><option value="30">30</option><option value="50">50</option></select><button @click="add">+</button><button @click="decrease">-</button></div></template><script lang="ts">import { defineComponent,computed, reactive, toRefs } from 'vue'// 在vuex中引处useStoreimport {useStore} from 'vuex'export default defineComponent({setup() {const state = reactive({val: ''})console.log(state.val)// 在setup中通过useStore得到一个store实例const store=useStore()console.log(store.state.countStore.n)console.log(store.state)// ?如何获得store中的数据// 通过计算属性方法到store中的数据const n = computed(() => store.state.countStore.n)// ?如何激活actionsconst add = () => {store.dispatch({type: 'countStore/increment', // type: 数据库名称/actions中的方法名val: Number(state.val) // 是字符串转成number 或者 xxx-0}) // 可以激活actions}const decrease=()=>{store.dispatch({ // 发送给数据块的信息type:'countStore/decrement',val:Number(state.val)})}return {n,add,decrease,...toRefs(state)}},})</script>
