littlebot
Published on 2025-04-10 / 1 Visits
0

【源码】基于Vue和TypeScript的Vuex扩展库

项目简介

在Vue 3里,TypeScript的支持情况较为良好,但Vuex对TypeScript的支持存在不足。本项目致力于扩展Vuex,使其能支持更多TypeScript特性,提供类型检查和编辑器提示,构建一个既保留Vuex原有功能,又能提升开发体验的扩展库。

项目的主要特性和功能

主要特性

  1. 高度支持TypeScript,具备强大的类型检查与自动完成功能。
  2. 遵循单向数据流原则,避免直接修改state中的数据。
  3. 支持插件系统,便于功能扩展。
  4. 内置loading状态管理,利于处理异步操作。
  5. 可创建多个独立的store实例。

功能亮点

  1. 类型检查:对state、getters和mutations进行全面类型声明,支持异步操作类型声明及loading状态跟踪。
  2. Vue风格简写:支持 articleStore.state.title 简写为 articleStore.titlearticleStore.getters.double 简写为 articleStore.doublearticleStore.mutations.SET_TITLE 简写为 articleStore.SET_TITLE

安装使用步骤

假设用户已下载本项目的源码文件。 1. 安装依赖:打开终端,进入项目目录,使用以下命令安装依赖。 bash npm install # 或者 yarn install 2. 使用Vuex扩展:在代码中导入Vuex扩展库并创建store实例。可参考以下示例: ```ts import { computed, reactive, Ref, watchEffect } from 'vue' import Vuex from '../src' import logPlugin from './logPlugin'

// 状态的类型 interface State { id: number | string title: string content: string } // 计算属性的类型 interface Getters { double: Ref } // 方法的类型 interface Mutations { SET_TITLE?: (name: string) => void }

// 1. 安装插件(可选) Vuex.install([logPlugin]) // 2. 创建store 。 可以多次调用 createStore 方法创建多个 store const articleStore = Vuex.createStore(() => { const state: State = reactive({ id: '1', title: 'Flowers title! ', content: 'beautiful flower', })

const getters: Getters = { double: computed(() => state.title + state.title), }

// 2.1 支持 同步和异步两种写法 const mutations: Mutations = { SET_TITLE(title) { return Promise.resolve().then(() => { state.title = title }) }, }

return { state, getters, mutations, } })

/* 测试 **/ watchEffect(() => { console.log(articleStore.title) // 或者 console.log(articleStore.state.title) console.log(articleStore.double.value) // 或者 console.log(articleStore.getters.double.value) console.log(articleStore.SET_TITLE.loading.value) // 或者 console.log(articleStore.SET_TITLE.loading.value) })

articleStore.SET_TITLE('tree') // 或者 articleStore.mutations.SET_TITLE('tree') ``` 需注意,不能直接修改state中的数据,要遵循单向数据流原则。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】