yarn list --pattern vuex-module-decorators

news2024/12/29 0:30:58
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: string
  id: number
  username: string
  avatar: string
  remark: string
  roles: string[]
  phone: string
  status: number
  pid: number
  passwordAttemptCount: 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 = -100
  public username = ''
  public avatar = ''
  public remark = ''
  public roles: string[] = []
  public phone = ''
  public status = -100
  public pid = -100
  public passwordAttemptCount = -100
  public introduction = ''
  • 这些是模块的初始状态。public 表示这些属性可以被外部访问。
  • token 的初始值从 Cookie 中读取。
  • 其他状态都有默认值,表示在未登录状态。

5. 定义 Mutations

  @Mutation
  private 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.coloradmin.cn/o/2267170.html

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

相关文章

微机接口课设——基于Proteus和8086的打地鼠设计(8255、8253、8259)Proteus中Unknown 1-byte opcode / Unknown 2-byte opcode错误

原理图设计 汇编代码 ; I/O 端口地址定义 IOY0 EQU 0600H IOY1 EQU 0640H IOY2 EQU 0680HMY8255_A EQU IOY000H*2 ; 8255 A 口端口地址 MY8255_B EQU IOY001H*2 ; 8255 B 口端口地址 MY8255_C EQU IOY002H*2 ; 8255 C 口端口地址 MY8255_MODE EQU IOY003H*2 ; …

【HENU】河南大学计院2024 计算机网络 期末复习知识点

和光同尘_我的个人主页 一直游到海水变蓝。 计网复习 第一章互联网组成类别交换方式分组交换的要点:分组交换的优点: 网络性能指标体系结构网络协议五层协议 第二章:物理层物理层的主要任务(四大特性)通信的三种方式…

chatwoot 开源客服系统搭建

1. 准备开源客服系统(我是用的Chatwoot ) 可以选择以下开源客服系统作为基础: Chatwoot: 功能强大,支持多渠道客户对接,(支持app,web)。Zammad: 现代的开源工单系统。FreeScout: 免…

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取,还是运用的是requests方法 首先进入此网站中,选取你想要爬取的视频,进入视频页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要…

【PPTist】表格功能

前言&#xff1a;这篇文章来探讨一下表格功能是怎么实现的吧&#xff01; 一、插入表格 我们可以看到&#xff0c;鼠标移动到菜单项上出现的提示语是“插入表格” 那么就全局搜索一下&#xff0c;就发现这个菜单在 src/views/Editor/CanvasTool/index.vue 文件中 <Popov…

Web安全攻防入门教程——hvv行动详解

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中&#xff0c;保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现&#xff0c;还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻防…

游戏开发线性空间下PS工作流程

前言 使用基于物理的渲染&#xff0c;为了保证光照计算的准确&#xff0c;需要使用线性空间&#xff1b; 使用线性空间会带来一个问题&#xff0c;ui 在游戏引擎中的渲染结果与 PS 中的不一致&#xff1a; PS&#xff08;颜色空间默认是sRGB伽马空间&#xff09;&#xff1a…

Segment Routing Overview

大家觉得有意义和帮助记得及时关注和点赞!!! Segment Routing (SR) 是近年来网络领域的一项新技术&#xff0c;“segment” 在这里 指代网络隔离技术&#xff0c;例如 MPLS。如果快速回顾网络设计在过去几十年的 发展&#xff0c;我们会发现 SR 也许是正在形成的第三代网络设计…

【连续学习之随机初始化算法 】2024Nature期刊论文Loss of plasticity in deep continual learning

1 介绍 年份&#xff1a;2024 期刊&#xff1a;Nature Dohare S, Hernandez-Garcia J F, Lan Q, et al. Loss of plasticity in deep continual learning[J]. Nature, 2024, 632(8026): 768-774. 本文提出的算法是“持续反向传播”&#xff08;continual backpropagation&a…

【NODE】01-fs和path常用知识点

前言 最近在使用express-generator知识进行搭建前后端通信&#xff0c;其中有些知识点涉及到nodejs的fs和path核心模块&#xff0c;因此另写一篇文章进行介绍和代码案例练习。 fs&#xff08;文件系统&#xff09;和 path 是 Node.js 的核心模块&#xff0c;用于文件操作和路径…

两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器

问题原因 remote-ssh还是有一些bug的&#xff0c;在跟新之后可能会一直加载初始化SSH主机解决方案 1.打开终端2.登录链接vscode的账号&#xff0c;到家目录下3.找到 .vscode-server文件,删掉这个文件4.重启 vscode 就没问题了

干货ScottPlot4向ScottPlot5迁移

干货ScottPlot4向ScottPlot5迁移 干货满满1.背景2.需求的引出3.先说结论1.好消息2.坏消息 4.迁移的部分笔记ColorScottPlot.PlottableScottPlot.Plottables中的对象如何定义添加 ScottPlot.Plottable.ScatterPlot 对象ScatterPolygonMarker也类似 Scatter的marker formsPlot1Re…

Github优质项目推荐(第九期)

文章目录 Github优质项目推荐&#xff08;第九期&#xff09;一、【tldraw】&#xff0c;37.1k stars - 在 React 中创建无限画布体验的库二、【zapret】&#xff0c;9.1k stars - 独立&#xff08;无需第三方服务器&#xff09;DPI 规避工具三、【uBlock】&#xff0c;48.3k s…

学习threejs,THREE.PlaneGeometry 二维平面几何体

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️HREE.PlaneGeometry 二维平…

力扣矩阵-算法模版总结

lc-73.矩阵置零-(时隔14天)-12.27 思路&#xff1a;(23min22s) 1.直接遍历遇0将行列设0肯定不行&#xff0c;会影响后续判断&#xff0c;题目又要求原地算法&#xff0c;那么进一步考虑是否可以将元素为0&#xff0c;其行列需要设为0的位置给存储下来&#xff0c;最后再遍历根据…

面向对象的设计原则与设计模式

目的 设计模式的目的是提高代码的重用性&#xff0c;可读性、可扩展性、可靠性&#xff0c;使程序呈现高内聚&#xff0c;低耦合的特性 原则 单一职责原则 假设有一个class负责两个职责&#xff0c;一旦发生需求变更&#xff0c;修改其中一个职责的逻辑代码&#xff0c;有可能…

网络安全词云图与技术浅谈

网络安全词云图与技术浅谈 一、网络安全词云图生成 为了直观地展示网络安全领域的关键术语&#xff0c;我们可以通过词云图&#xff08;Word Cloud&#xff09;的形式来呈现。词云图是一种数据可视化工具&#xff0c;它通过字体大小和颜色的差异来突出显示文本中出现频率较高…

Jsonlizer,一个把C++各类数据转成 Json 结构体的玩意儿

这段时间突发奇想&#xff0c;觉得可以弄一个Json和C各种数据类型互转的工具&#xff0c;因为Json在进行数据储存的时候&#xff0c;有一些先天的优势&#xff0c;传统的C的序列化方式是将数据序列化到流数据里面&#xff0c;而流数据是典型的串行结构&#xff08;或则说是一维…

删除拼排序链表中的重复元素(最优解)

题目来源 82. 删除排序链表中的重复元素 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head…

OpenHarmony-5.PM 子系统(2)

电池服务组件OpenHarmony-4.1-Release 1.电池服务组件 Battery Manager 提供了电池信息查询的接口&#xff0c;同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。电池服务组件提供如下功能&#xff1a; 电池信息查询。充放电状态查询。关机充电。 电池服务组件架…