likes
comments
collection
share

vue3+ts+vite中vuex的初体验

作者站长头像
站长
· 阅读数 40

前言

vuex主要用于做状态管理,之前呢不太了解vuex的同学,可以移步 vuex官方文档,这里主要简单介绍下 vue3.x + vuex4.x + ts + 组合式API 的用法,具体如下:

操作步骤

第一步:安装vuex

npm install vuex@next --save  ||  yarn add vuex@next --save  //@next:最新版本

第二步:创建store

创建一个Vuex的存储模块,你可以在项目的任何位置创建一个 store 文件夹,并在其中创建一个index.ts文件。这个文件将成为你的Vuex存储模块的入口。

第三步:在main.ts 中关联store

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

const app = createApp(App)
app.use(store);
app.mount('#app')

第四步:配置store,处理请求

这里用createStore函数创建一个store对象,store中包含store对象,mutations,actions,getters,mutations,他们之间的关系如最后图解。

import { createStore } from 'vuex';
import { getAllCardList, IList } from "@/api/card";  //接口

// 定义状态的类型
interface State {
  allDataCard: IList[];
}

// 创建一个新的Vuex模块
const store = createStore<State>({
  state() {
    return {
      allDataCard: []   //卡片数据
    };
  },

  mutations: {
    setCardData(state, payload) {
      state.allDataCard = payload
    }
  },
  
  actions: {
    async initializeCard(context) {
      try {
        let {
          data: { dataCard },
        } = await getAllCardList();
        context.commit("setCardData", dataCard);
      } catch (error) {
        console.log(error);
      }

    }
  },
  getters: {
    // 这里定义你的计算属性方法
  },
});

export default store;

第五步:在组件中分发action

分发action还是调用 dispatch 函数。和之前的vue2中用法相同。

import { onMounted } from "vue";
import { Store, useStore } from "vuex";
onMounted(() => {
  const store: Store<any> = useStore();
  store.dispatch("initializeCard");
});

第六步:在其他组件中获取state

由于setup中不能使用this,可以通过调用 useStore 函数,来在 setup 钩子函数中访问 store。这与在组件中使用选项式 API 访问 this.$store 是等效的。

import { Store, useStore } from "vuex";
const store: Store<any> = useStore();
let data = store.state.allDataCard;

图解

vue3+ts+vite中vuex的初体验

转载自:https://juejin.cn/post/7247057861129617464
评论
请登录