yarn list --pattern vuex-module-decorators

embedded/2024/12/31 1:02: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: 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 模块化的实现方式,对于大型应用来说,使用模块化管理状态是至关重要的。 它更加组织化、易于维护,并通过装饰器方式提高了代码的可读性。

<a class=vuex-module-decorators" />


http://www.ppmy.cn/embedded/149744.html

相关文章

爬虫入门二 beautifulsoup

1 beautifulsoup简介 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过转换器实现文档导航、查找、修改。 pip install beautifulsoup4http://beautifulsoup.readthedocs.io/zh_CN/latest/ 2 前端知识 w3school 在线教程 HTTP:HyperText Markup La…

互联网路由架构

大家觉得有意义和帮助记得及时关注和点赞!!! 本书致力于解决实际问题&#xff0c;书中包含大量的架构图、拓扑图和真实场景示例&#xff0c;内容全面 且易于上手&#xff0c;是不可多得的良心之作。本书目的是使读者成为将自有网络集成到全球互联网 领域的专家。 以下是笔记内…

基于JAVA+SpringBoot+Vue的影院订票系统

基于JAVASpringBootVue的影院订票系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈喽兄…

【HarmonyOS之旅】ArkTS语法(二)->动态构建UI元素

目录 1 -> Builder 2 -> BuilderParam8 2.1 -> 引入动机 2.2 -> 参数初始化组件 2.3 -> 尾随闭包初始化组件 3 -> Styles 4 -> Extend 5 -> CustomDialog 1 -> Builder 可通过Builder装饰器进行描述&#xff0c;该装饰器可以修饰一个函数&…

网络技术-QoS技术在网络中的位置

QoS技术包括流分类、流量监管、流量整形、限速、拥塞管理、拥塞避免等。下面对常用的技术进行简单地介绍。 如图&#xff0c;常用QoS技术在网络中的位置 如上图所示&#xff0c;流分类、流量监管、流量整形、拥塞管理和拥塞避免主要完成如下功能&#xff1a; 流分类&#xf…

Configfs - 用户空间驱动的内核对象配置

什么是configfs configfs 是一个基于 RAM 的文件系统&#xff0c;提供与 sysfs 相反的功能。sysfs 是一个基于文件系统的内核对象视图&#xff0c;而 configfs 是一个基于文件系统的内核对象管理器&#xff0c;即 config_items。 使用 sysfs&#xff0c;可以在内核中创建一个…

使用 VSCode 学习与实践 LaTeX:从插件安装到排版技巧

文章目录 背景介绍编辑器编译文件指定输出文件夹 usepackagelatex 语法列表插入图片添加参考文献 背景介绍 最近在写文章&#xff0c;更喜欢latex的论文引用。然后开始学习 latex。 编辑器 本文选择vscode作为编辑器&#xff0c;当然大家也可以尝试overleaf。 overleaf 有网…

SPI实验 LED数码管

LED数码管&#xff08;LED Segment Displays&#xff09;是由8个发光二极管构成&#xff0c;并按照一定的图形及排列封装在一起的显示器件。其中7个LED构成7笔字形&#xff0c;1个LED构成小数点&#xff08;固有时成为八段数码管&#xff09;。 LED数码管有两大类&#xff0c;…