vue重修之Vuex【下部】

news2025/1/11 22:45:08

文章目录

  • 版权声明
  • Vuex的模块化
  • 获取Vuex模块内state数据
  • 获取Vuex模块内getters数据
  • 获取Vuex模块内mutations方法
  • 获取模块内的actions方法
  • 总结

版权声明

  • 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用,并非商业用途。
  • 我在整理学习笔记的过程中尽力确保准确性,但无法保证内容的完整性和时效性。本博客的内容可能会随着时间的推移而过时或需要更新。
  • 若您是黑马程序员或相关权利人,如有任何侵犯版权的地方,请您及时联系我,我将立即予以删除或进行必要的修改。
  • 对于其他读者,请在阅读本博客内容时保持遵守相关法律法规和道德准则,谨慎参考,并自行承担因此产生的风险和责任。本博客中的部分观点和意见仅代表我个人,不代表黑马程序员的立场。

Vuex的模块化

  • Vuex是Vue.js应用程序的状态管理库。Vuex模块是一个独立的部分,它封装了自己的状态(state)、变更(mutations)、动作(actions)和获取器(getters)。通过定义一个包含模块状态、变更、动作和获取器的对象来创建Vuex模块。然后,可以将该对象传递给Vuex存储的modules选项以注册该模块。
    在这里插入图片描述

以下是一个简单的Vuex模块示例:

// module.js
const module = {
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  },
  actions: {
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  },
  getters: {
    doubleCount(state) {
      return state.count * 2
    }
  }
}

export default module
  • 要在Vuex存储中使用此模块,可以导入它并将其添加到modules选项中:
import Vue from 'vue'
import Vuex from 'vuex'
import module from './module'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    module
  }
})

export default store

获取Vuex模块内state数据

  • 子模块的状态,会挂到根级别的 state 中,属性名就是模块。
    在这里插入图片描述
  • 使用模块中的数据
  1. 直接通过模块名访问 $store.state.模块名.xxx
  2. 通过 mapState 映射:
    1. 默认根级别的映射 mapState([ ‘xxx’ ])
    2. 子模块的映射 :mapState(‘模块名’, [‘xxx’]) - 需要开启命名空间 namespaced:true
  • modules/user.js
const state = {
  userInfo: {
    name: 'zs',
    age: 18
  },
  myMsg: '我的数据'
}

const mutations = {
  updateMsg (state, msg) {
    state.myMsg = msg
  }
}

const actions = {}

const getters = {}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}
  • $store直接访问
$store.state.user.userInfo.name
  • mapState辅助函数访问
...mapState('user', ['userInfo']),
...mapState('setting', ['theme', 'desc']),

获取Vuex模块内getters数据

  • mapGetters 函数用于从模块中映射 getters 到局部计算属性。它接收一个字符串数组和/或对象。
  • 字符串数组中的每个项都是 getter 名称,对象中的每个键是局部计算属性名称,值是 getter 名称。

使用模块中 getters 中的数据:

  1. 直接通过模块名访问 $store.getters['模块名/xxx ']
  2. 通过 mapGetters 映射
    1. 默认根级别的映射 mapGetters([ 'xxx' ])
    2. 子模块的映射 mapGetters('模块名', ['xxx']) - 需要开启命名空间:namespaced:true

以下是一个使用 mapGetters 的示例:

<template>
  <div>
    <p>count: {{doubleCount}}</p>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'

export default {
  computed: {
    // 从名为 `module` 的 store 模块中映射 `doubleCount` getter
    ...mapGetters('module', ['doubleCount'])
  }
}
</script>

获取Vuex模块内mutations方法

  • 调用方式:
  1. 直接通过 store 调用 $store.commit('模块名/xxx ', 额外参数)
  2. 通过 mapMutations 映射
    1. 默认根级别的映射 mapMutations([ 'xxx' ])
    2. 子模块的映射 mapMutations('模块名', ['xxx']) - 需要开启命名空间:namespaced:true
<button @click="setUser({ name: 'xiaoli', age: 80 })">更新个人信息</button>
<button @click="setTheme('skyblue')">更新主题</button>

methods:{
// 分模块的映射
...mapMutations('setting', ['setTheme']),
...mapMutations('user', ['setUser']),
}

获取模块内的actions方法

  • 默认模块中的 mutation 和 actions 会被挂载到全局,需要开启命名空间,才会挂载到子模块。

  • mapActions 函数用于从模块中映射 actions 到局部方法。

  • 字符串数组中的每个项都是 action 名称,对象中的每个键是局部方法名称,值是 action 名称。

  • 需求:实现一秒后更新信息

    • modules/user.js
    const actions = {
      setUserSecond (context, newUserInfo) {
        // 将异步方法在action中进行封装
        setTimeout(() => {
          // 调用mutation   context上下文,默认提交的就是自己模块的action和mutation
          context.commit('setUser', newUserInfo)
        }, 1000)
      }
    }
    
    • Son1.vue 直接通过store调用
    <button @click="updateUser2">一秒后更新信息</button>
    
    methods:{
        updateUser2 () {
          // 调用action dispatch
          this.$store.dispatch('user/setUserSecond', {
            name: 'xiaohong',
            age: 28
          })
        },
    }
    
    • Son2.vue mapActions映射
    <button @click="setUserSecond({ name: 'xiaoli', age: 80 })">一秒后更新信息</button>
    
    methods:{
      ...mapActions('user', ['setUserSecond'])
    }
    

总结

类别直接使用模式借助辅助方法使用
state$store.state.模块名.数据项名…mapState(‘模块名’, [‘数据项’]) 或 …mapState(‘模块名’, { 新的名字: 原来的名字 })
getters$store.getters[‘模块名/属性名’]…mapGetters(‘模块名’, [‘属性名’]) 或 …mapGetters(‘模块名’, { 新的名字: 原来的名字 })
mutations$store.commit(‘模块名/方法名’, 其他参数)…mapMutations(‘模块名’, [‘方法名’]) 或 …mapMutations(‘模块名’, { 新的名字: 原来的名字 })
actions$store.dispatch(‘模块名/方法名’, 其他参数)…mapActions(‘模块名’, [‘方法名’]) 或 …mapActions(‘模块名’, { 新的名字: 原来的名字 })
组件中使用方式在组件中,使用 $store 对象进行数据和方法的获取在组件中,使用扩展运算符直接调用属性和方法,例如 {{ age }} 或 @click=“updateAge(2)”

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

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

相关文章

DBeaver连接数据库报错:Public Key Retrieval is not allowed 的解决方案

写在前面&#xff1a; DBeaver是一款免费的数据库管理工具&#xff0c;安装也是傻瓜式一键安装&#xff0c;比较推荐。 DBeaver官网&#xff08;加载有点慢&#xff0c;耐心等待&#xff09;&#xff1a;DBeaver Community | Free Universal Database Tool 报错详情&#xff…

【Java 进阶篇】Java Request 原理详解

在网络应用开发中&#xff0c;HTTP请求是一项常见而关键的任务。当我们使用Java编写网络应用时&#xff0c;了解HTTP请求的工作原理变得至关重要。本文将详细介绍Java中HTTP请求的原理&#xff0c;包括请求的结构、发送请求的方法以及处理请求的过程。 HTTP请求的基本结构 HT…

使用字节流读取文件中的数据的几种方式

public class FileReader02_ {public static void main(String[] args) {}Testpublic void m1() {String filePath "e:\\hello.txt";FileReader fileReader null;int date0;try {fileReader new FileReader(filePath);//循环读取 使用readwhile ((datefileReader.…

上市公司员工及工资数据(2000-2022年)

参照《经济研究》中毛其淋等&#xff08;2023&#xff09;的做法&#xff0c;团队对上市公司员工、工资数据测算。用上市公司&#xff49;在&#xff54;年的员工人数的对数衡量企业的就业水平&#xff0c;采用企业应付职工薪酬与员工人数的比值衡量企业工资水平 一、数据介绍 …

PROFINET通信介绍

S7-1200和汇川变频器的PROFINET通信应用&#xff0c;请参考下面文章链接&#xff1a; PN通信组态(汇川变频器和S7-1200PN通信)-CSDN博客文章浏览阅读1.2k次。ABB变频器的PN通信相关设置&#xff0c;请参看下面的文章链接博途PLC和ABB变频器PN通讯详解_abb 变频器 pn通信_RXXW_…

Windows客户端下pycharm配置跳板机连接内网服务器

问题&#xff1a;实验室服务器仅限内网访问&#xff0c;无法在宿舍&#xff08;外网&#xff09;访问实验室的所有内部服务器&#xff0c;但同时实验室又提供了一个外网可以访问的跳板机&#xff0c;虽然可以先ssh到跳板机再从跳板机ssh到内网服务器&#xff0c;但这种方式不方…

朵拉钓鱼,快来一起钓鱼

欢迎来到程序小院 朵拉钓鱼 玩法&#xff1a;鼠标对准鱼的位置点击左键进行钓鱼&#xff0c;钓到不同鱼有不同分数奖励&#xff0c;钓到鞋子-2&#xff0c;钓到鲨鱼游戏结束&#xff0c;统计分数&#xff0c;快去钓鱼吧^^。开始游戏https://www.ormcc.com/play/gameStart/195 …

protobuf使用详解

一、protobuf简介 1、什么是 protobuf Protocal Buffers&#xff08;简称protobuf&#xff09;是谷歌的一项技术&#xff0c;用于结构化的数据序列化、反序列化。 官方解释&#xff1a;Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它…

Power BI 傻瓜入门 11. 可视化数据

本章内容包括&#xff1a; 掌握Power BI中可用的各种可视化选项决定何时使用特定的可视化技术了解Power BI版本之间的可视化配置差异 “一张图片能说出千言万语”是许多人使用Power BI的原因之一。您已经导入了数据&#xff0c;可能有数百万条记录&#xff0c;现在您想了解数…

二维码制作教程:如何制作一个文件二维码?

文件二维码&#xff0c;即PDF、PPT、Word、Excel、图片、MP3音频文件、MP4视频文件等生成的二维码。因为二维码传播信息效率高、成本低&#xff0c;越来越多的企业在日常工作中都选择使用二维码来传送文件。比如&#xff0c;市场部年度推广计划书、财务季度报表汇总、年会流程通…

【Superset】自定义授权认证,接入内部系统二次开发

想要将内部系统认证与superset打通,必须要了解superset的认证体系。 Superset的认证体系 Superset的认证体系可以通过以下几种方式进行配置: 基于LDAP认证:Superset可以集成LDAP以验证用户身份。在这种情况下,Superset将根据LDAP中的用户信息进行身份验证,并从LDAP中获取…

家用智能安防系统包括哪几个部分?如何应用?

智能家居安防系统除了传统的安全装置之外&#xff0c;还有可以进行语音控制、视频监控、移动侦测等高科技智能化功能的升级版&#xff0c;这对于现代社会中的人们来说是一个不错的选择&#xff0c;也是生活水平的一次提升。今天&#xff0c;小编就为大家介绍一下智能家居安防系…

系列五、BeanDefinition

一、概述 BeanDefinition是一个接口&#xff0c;主要负责存储bean的定义信息&#xff0c;决定bean的生产方式&#xff0c;类似于说明书。后续BeanFactory就可以根据这些信息生产bean了。比如实例化&#xff1a;可以通过class进行反射得到实例对象&#xff0c;比如lazy&#xff…

输入/输出应用程序接口和设备驱动程序接口

文章目录 1.输入/输出应用程序接口1.字符设备接口2.块设备接口3.网络设备接口1.网络设备套接字通信 4.阻塞/非阻塞I/O 2.设备驱动程序接口1.统一标准的设备驱动程序接口 1.输入/输出应用程序接口 1.字符设备接口 get/put系统调用:向字符设备读/写一个字符 2.块设备接口 read/wr…

宝塔Python3.7安装模块报错ModuleNotFoundError: No module named ‘Crypto‘解决办法

前言 今晚遇到一个问题&#xff0c;宝塔服务器上安装脚本的模块时&#xff0c;出现以下报错&#xff0c;这里找到了解决办法 Traceback (most recent call last):File "/www/wwwroot/unifysign/fuck_chaoxing/fuck_xxt.py", line 4, in <module>from Crypto.…

统计数(C++)

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

大模型时代,AI如何成为数实融合的驱动力?

10月25日&#xff0c;百度APP、百家号联合中兴通讯举办的“时代的增量“主题沙龙第二期在北京顺利召开。本期沙龙围绕“数实融合新视角”邀请学界、业界、媒体从业者等领域专家出席&#xff0c;以产学研相结合的视角深入探讨数实融合的最新技术趋势&#xff0c;并围绕数实融合在…

AFsim编译-Windows

AFsim软件的核心应用及服务包括&#xff1a; sensor_plot&#xff1a;传感器覆盖和天线增益绘制工具&#xff1b; engage&#xff1a;武器交战分析工具&#xff1b; weapon_tools&#xff1a;武器建模工具&#xff1b; mission&#xff1a;任务仿真工具&#xff1b; post_…

go创建完美的枚举类型

文章目录 一.前言二. 枚举基本要素描述三. 枚举设计源码3.1 EnumCommon-通用能力3.2 Enum_news 业务枚举3.3 定制化业务枚举 一.前言 用惯了springboot和Jakarta.才发现springboot和Jakarta的语言是多么精妙! 一些场景我们需要使用枚举: 如建立字典值映射,仅通过代码实现方便快…