yarn list --pattern vuex-module-decorators

dgq@dgqdeMac-mini spid-admin % yarn list --pattern vuex-module-decorators
yarn list v1.22.22
└─ vuex-module-decorators@0.16.1
✨  Done in 0.24s.

好的,这段代码是一个典型的 Vuex 模块定义,使用了 vuex-module-decorators 库。这个库为 Vuex 提供了基于装饰器的 API,使得模块的定义更加简洁和面向对象。

我来详细解释一下这段代码的各个部分:

1. 导入模块和 API:

spid-admin/src/store/modules/user.ts
import { VuexModule, Module, Action, Mutation, getModule } from 'vuex-module-decorators'
import { login, logout, getUserInfo, phoneLogin } from '@/api/users'
import { getToken, setToken, removeToken } from '@/utils/cookies'
import router, { resetRouter } from '@/router'
import { PermissionModule } from './permission'
import { TagsViewModule } from './tags-view'
import store from '@/store'
  • vuex-module-decorators:这个库提供了 @Module, @Action, @Mutation, getModule 等装饰器,用于简化 Vuex 模块的定义。
  • login, logout, getUserInfo, phoneLogin:这些是从 @/api/users 导入的 API 函数,用于与后端进行用户相关的交互(登录、登出、获取用户信息等)。
  • getToken, setToken, removeToken:这些函数来自 @/utils/cookies,用于操作浏览器 Cookie,存储和读取 token 信息。
  • router, resetRouter:来自 @/router 的路由实例和重置路由的函数。
  • PermissionModule, TagsViewModule:来自 permissiontags-view 的 Vuex 模块。
  • store:从 @/store 导入的 Vuex 的 store 实例。

2. 定义接口 IUserState

export interface IUserState {token: stringid: numberusername: stringavatar: stringremark: stringroles: string[]phone: stringstatus: numberpid: numberpasswordAttemptCount: number
}
  • IUserState 定义了用户状态的数据结构,包括 token, id, username, avatar 等属性,确保数据类型的正确性。

3. 定义 Vuex 模块 User

@Module({ dynamic: true, store, name: 'user' })
class User extends VuexModule implements IUserState {// ...
}
  • @Module({ dynamic: true, store, name: 'user' })
    • @Module 是一个装饰器,用于将类标记为一个 Vuex 模块。
    • dynamic: true 表示该模块是动态注册的,而不是在 store 初始化时静态注册。
    • store 接收 Vuex store 的实例。
    • name: 'user' 指定该模块在 store 中的名称。
  • class User extends VuexModule implements IUserState
    • User 类继承自 VuexModule,使其具有 Vuex 模块的功能。
    • implements IUserState 表示该类必须实现 IUserState 接口中定义的所有属性。

4. 定义模块状态 (state)

  public token = getToken() || ''public id = -100public username = ''public avatar = ''public remark = ''public roles: string[] = []public phone = ''public status = -100public pid = -100public passwordAttemptCount = -100public introduction = ''
  • 这些是模块的初始状态。public 表示这些属性可以被外部访问。
  • token 的初始值从 Cookie 中读取。
  • 其他状态都有默认值,表示在未登录状态。

5. 定义 Mutations

  @Mutationprivate SET_TOKEN(token: string) {this.token = token}// ... 其他 mutation
  • @Mutation 是一个装饰器,用于声明修改状态的方法。
  • Mutation 方法接收一个 payload(数据),并使用 this 关键字修改模块的状态。
  • private 修饰符表明这些方法只能在模块内部被调用。

6. 定义 Actions

 @Action({ rawError: true })public async Login(userInfo: { username: string, password: string}) {// ...}@Action({ rawError: true })public async GetUserInfo() {// ...}// ... 其他 action
  • @Action 是一个装饰器,用于声明执行异步操作的方法。
  • Action 方法接收一个 payload(数据),并使用 this 关键字访问模块的状态和调用 mutations。
  • { rawError: true } 表示该 action 抛出的错误将直接抛出,而不是包装在 Promise 中。
  • Action 中调用 API,并通过 mutation 方法更新状态。

7. getModule 和导出 UserModule

export const UserModule = getModule(User)
  • getModule(User)vuex-module-decorators 提供的函数,用于获取 User 模块的实例。
  • export const UserModule 将 User 模块实例导出,以便在其他模块中使用。

总结:

这段代码使用 vuex-module-decorators 简化了 Vuex 用户模块的定义,包括:

  • 状态 (state): 存储用户信息,如 token、id、用户名等。
  • Mutations: 用于同步更新状态的方法(例如设置 token、设置用户信息等)。
  • Actions: 用于异步操作和提交 mutations 的方法(例如登录、登出、获取用户信息等)。

如何使用:

  1. 在组件中,你可以通过 UserModule 访问用户模块的状态和调用 action:

        import { UserModule } from '@/store/modules/user';// ...mounted() {console.log(UserModule.username); // 获取用户名}methods: {async handleLogin() {await UserModule.Login({username:'admin', password:'password'}) // 调用登录 action}}
    

这段代码展示了一种标准的 Vuex 模块化的实现方式,对于大型应用来说,使用模块化管理状态是至关重要的。 它更加组织化、易于维护,并通过装饰器方式提高了代码的可读性。

vuex-module-decorators

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **打印结果** 完整代码 以下游戏规则: 那么我们要实现的功能,就是…

day19-Linux软件包

科普,什么是代码文件。 电脑程序Program,就是某一个编程语言编写的一个代码文件,里面包含了该语言特有的指令,以及各种字符、符号。 linux自带的network管理脚本,shell脚本 什么是软件程序。 软件程序,就…

图像处理-Ch4-频率域处理

Ch4 频率域处理(Image Enhancement in Frequency Domain) FT :将信号表示成各种频率的正弦信号的线性组合。 频谱: ∣ F ( u , v ) ∣ [ R 2 ( u , v ) I 2 ( u , v ) ] 1 2 |F(u, v)| \left[ R^2(u, v) I^2(u, v) \right]^{\frac{1}{2}} ∣F(u,v)…

Vue BPMN Modeler流程图

1、参考地址 git clone https://github.com/evanyangg/vue-bpmn-modeler.git 2、安装bpmn.js npm install bpmn-js --save 3、使用bpmn.js <template><div class"containers"><div class"canvas" ref"canvas"></div&g…

STM32完全学习——FATFS0.15移植SD卡

一、下载FATFS源码 大家都知道使用CubMAX可以很快的将&#xff0c;FATFS文件管理系统移植到单片机上&#xff0c;但是别的芯片没有这么好用的工具&#xff0c;就需要自己从官网下载源码进行移植。我们首先解决SD卡的驱动问题&#xff0c;然后再移植FATFS文件管理系统。 二、SD…

5、栈应用-表达式求值

本章内容使用上述栈结构函数&#xff0c;来完成表达式求值操作。 表达式例如&#xff1a;3*(7-2) 或者 (0-12)*((5-3)*32)/(22) 。 1、实现思路 a、建立OPTR&#xff08;运算符&#xff09;和OPND&#xff08;数字&#xff09;两个栈&#xff0c;后输入字符串以结束 b、自左向…

【递归与回溯深度解析:经典题解精讲(下篇)】—— Leetcode

文章目录 有效的数独解数独单词搜索黄金矿工不同的路径||| 有效的数独 递归解法思路 将每个数独的格子视为一个任务&#xff0c;依次检查每个格子是否合法。 如果当前格子中的数字违反了数独规则&#xff08;在行、列或 33 小方块中重复&#xff09;&#xff0c;直接返回 Fals…

Llama 3 预训练(二)

目录 3. 预训练 3.1 预训练数据 3.1.1 网络数据筛选 PII 和安全过滤 文本提取与清理 去重&#xff08;De-duplication&#xff09; 启发式过滤&#xff08;Heuristic Filtering&#xff09; 基于模型的质量过滤 代码和数学推理数据处理 多语言数据处理 3.1.2 确定数…

双指针——查找总价格为目标值的两个商品

一.题目描述 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 二.题目解析 这个题目非常简单&#xff0c;其实就是判断有没有两个数加起来等于target。 三.算法解析 1.暴力解法 暴力解法的话我们可以枚举出所有的情况&#xff0c;然后判…

sqlserver镜像设置

本案例是双机热备&#xff0c;只设置主体服务器&#xff08;主&#xff09;和镜像服务器&#xff08;从&#xff09;&#xff0c;不设置见证服务器 设置镜像前先检查是否启用了 主从服务器数据库的 TCP/IP协议 和 RemoteDAC &#xff08;1&#xff09;打开SQL Server配置管理器…

Elasticsearch:analyzer(分析器)

一、概述 可用于将字符串字段转换为单独的术语&#xff1a; 添加到倒排索引中&#xff0c;以便文档可搜索。级查询&#xff08;如 生成搜索词的 match查询&#xff09;使用。 分析器分为内置分析器和自定义的分析器&#xff0c;它们都是由若干个字符过滤器&#xff08;chara…

ElementPlus 自定义封装 el-date-picker 的快捷功能

文章目录 需求分析 需求 分析 我们看到官网上给出的案例如下&#xff0c;但是不太满足我们用户想要的快捷功能&#xff0c;因为不太多&#xff0c;因此需要我们自己封装一些&#xff0c;方法如下 外部自定义该组件的快捷内容 export const getPickerOptions () > {cons…

低代码开发平台排名2024

低代码开发平台在过去几年中迅速崛起&#xff0c;成为企业数字化转型的重要工具。这些平台通过可视化界面和拖放组件&#xff0c;使业务人员和技术人员都能快速构建应用程序&#xff0c;大大缩短了开发周期。以下是一些在2024年值得关注和使用的低代码开发平台。 一、Zoho Cre…

计算机网络——期末复习(4)协议或技术汇总、思维导图

思维导图 协议与技术 物理层通信协议&#xff1a;曼彻斯特编码链路层通信协议&#xff1a;CSMA/CD &#xff08;1&#xff09;停止-等待协议&#xff08;属于自动请求重传ARQ协议&#xff09;&#xff1a;确认、否认、重传、超时重传、 &#xff08;2&#xff09;回退N帧协…

【MySQL学习笔记】关于索引

文章目录 【MySQL学习笔记】关于索引1.索引数据结构2.索引存储3.联合索引3.1 联合索引的b树结构3.2 索引覆盖&#xff1f;回表&#xff1f;3.3 联合索引最左匹配原则3.5 索引下推 4.索引失效 【MySQL学习笔记】关于索引 1.索引数据结构 索引是一种能提高查询速度的数据结构。…

D104【python 接口自动化学习】- pytest进阶参数化用法

day104 pytest参数化parametrize单参数 学习日期&#xff1a;20241223 学习目标&#xff1a;pytest基础用法 -- pytest参数化parametrize单参数 学习笔记&#xff1a; 参数化 parametrize 参数化可以组装测试数据&#xff0c;在测试前定义好测试数据&#xff0c;并在测试用…

第T4周:TensorFlow实现猴痘识别(Tensorboard的使用)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 1、学习tensorboard的使用 具体实现&#xff1a; &#xff08;一&#xff09;环境&#xff1a; 语言环境&#xff1a;Python 3.10 编 译 器…

Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde

介绍 安装自己的linux-server,可以作为学习使用&#xff0c;web方式访问&#xff0c;基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …

小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面

文章目录 前言一、开启SSH二、配置阿里云ddns1.准备工作2.创建ddns脚本3.添加定时任务 三、开启外网访问SSH和WEB管理界面1、解除WEB管理页面访问限制2.手动添加防火墙端口转发规则&#xff0c;开启外网访问WEB管理和SSH 前言 例如&#xff1a;随着人工智能的不断发展&#xf…

什么是ESC ---- 防止车辆打滑并提高驾驶时稳定性的技术

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所谓鸡汤&#xff0c;要么蛊惑你认命&#xff0c;要么怂恿你拼命&#xff0c;但都是回避问题的根源&…