Vue 05 Vuex

Vue 学习

  • Vue 05 vuex
  • 01 介绍
  • 02 工作原理(原理图)
    • 使用
  • 03 案例
    • 求和
      • 补充HTML
    • 纯vue实现
    • vuex使用
  • 04 getters配置项
  • 05 mapState 与 mapGetters
    • 补:ES6语法
    • mapState使用
    • mapGetters
    • 总结
  • 06 mapActions 与 mapMutations
    • mapMutations
    • mapActions
    • 总结
  • 07 多组件共享数据
  • 08 vuex模块化

Vue 05 vuex

01 介绍

1、概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

2、什么时候使用Vuex

① 多个组件依赖于同一状态

② 来自不同组件的行为需要变更同—状态

多组件共享数据——全局事件总线实现

下图是BCD读到A中的数据
在这里插入图片描述

下图,所有人都可以 读、写 X

在这里插入图片描述

多组件共享数据——VueX总线实现

vuex不属于任何一个组件(A B C D App)

在这里插入图片描述

02 工作原理(原理图)

在这里插入图片描述

action 本质是对象;mutation本质是对象;state 状态,等于数据。本质是一个对象。 **他们仨是被 store管理的。despatch、commit是store提供的。**需要让所有的VC都可以访问到 store

以下面的求和案例讲解:

在这里插入图片描述

vue允许你可以直接调用mutations(action的作用是,如果除法的除数来自另一台服务器,那么在他这里发送请求)

vc:客人;Action服务员;Mutation后厨; State菜。

使用

① npm i vuex

注意,在2022年2月,vue3成为了默认版本,也就是说 执行 npm i vue时安装的直接就是vue3。并且vue3 成为默认版本的同时,vuex也升级到了4版本。npm i vuex安装的是vuex4。 vuex4 只能在 vue3 上使用,如果我们在一个vue2项目中安装vuex4 就会报错。

**vue2中,要用vuex的3版本。vue3中,要用vuex的4版本。**视频教学中使用的是vue2所以要安装vuex3版本。npm i vuex@3

② Vue.use(Vuex)

在use了vuex之后,创建vm的时候就可以传入配置项 store了

在这里插入图片描述

③ store

创建store

方法① src下创建文件夹 vuex,vuex文件夹张创建空白的 store.js

方法② src下创建文件夹 store,store下创建空白 index.js

要先创建vuex实例,再创建store

④ vc==>store
在这里插入图片描述
在这里插入图片描述

Q:为什么 这么配置就能保证组件能访问到?因为这个store作为 new Vue 的配置对象,我能理解 vm 可以访问到,但是所有 vc 是怎么访问到的?之前的全局总线配置在了 Vue.prototype 中所以 所有vc可以访问,这次是为什么?

感觉这一篇比较好的解释了。https://blog.csdn.net/dyw3390199/article/details/115207165

在这里插入图片描述

03 案例

求和

在这里插入图片描述

补充HTML

在这里插入图片描述

双向数据绑定,复选框的值 要通过value定义

纯vue实现

  • MyCount.vue
<template>
	<div>
		<h1>当前求和为:{{sum}}</h1>

		<select v-model.number="n">
			<option value="1">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
		</select>
   
		<button @click="increment">+</button>
		<button @click="decrement">-</button>
		<button @click="incrementOdd">当前求和为奇数再加</button>
		<button @click="incrementWait">等一等再加</button>
	</div>
</template>

<script>
	export default {
		name:'MyCount',
		data() {
			return {
				n:1, //用户选择的数字
			}
		},
		methods: {
			increment(){
				this.sum += this.n
			},
			decrement(){
				this.sum -= this.n
			},
			incrementOdd(){
				if(this.sum % 2){
					this.sum += this.n
				}
			},
			incrementWait(){
				setTimeout(()=>{
					this.sum += this.n
				},500)
			},
		},
    watch: {
      n(value) {
        console.log(value);
      }
    }
	}
</script>

vuex使用

配置好vuex、保证每一个VC身上都有store之后:

  • 以加法为例

MyCount.vue

<template>
	<div>
       <!-- 最后一步 使用修改之后的state。注意这里不用写this -->
		<h1>当前求和为:{{$store.state.sum}} </h1>

		<select v-model.number="n">
			<option value="1">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
		</select>
		<button @click="increment">+</button>
	</div>
</template>

<script>  
	export default {
		name:'MyCount',
		data() {
			return {
				n:1, //用户选择的数字
        // ************************************************************
        // 步骤一 为了演示vuex,把本例中的 sum 放去了 /src/store/index.js
				// sum:0 当前的和
			}
		},
		methods: {
			increment(){
        this.$store.dispatch('jia', this.n)
        // ************************************************************
        // 步骤二 dispatch
        // (步骤三 去/src/store/index.js中让 actions 里面配置好函数)
				// this.sum += this.n
			}
	}
</script>

store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const actions = {
  jia(context,value) {
    console.log('actions中的jia被调用了',context,value);
    context.commit('JIA',value) // 提交
    // 开发技巧 JIA写大写
  }
}

const mutations= {
  // 开发技巧 JIA写大写
  JIA(state, value){
    console.log('mutation中的JIA');
    state.sum += value
    console.log(state.sum );
  },
}

const state = {
  sum:0 //当前的和
}

export default new Vuex.Store({
  actions,
  mutations,
  state
})

在这里插入图片描述

组件中直接调用commit和mutations对话:注意这里需要大写

在这里插入图片描述

04 getters配置项

Store中的配置项 getters

getters——用于将state中的数据进行加工 可以视作计算属性

在这里插入图片描述

总结:

1、概念:当state中的数据需要经过加工后再使用时,可以使用getters加工。

2、在 store.js 中追加 getters 配置(得写返回值)

在这里插入图片描述

3、组件中读取数据:$store.getters.bigSum

05 mapState 与 mapGetters

为什么要引入mapState 与 mapGetters?

在我们的代码中,我们把共有的状态(数据)写在了 store/index.js 上。于是在组件中想对数据进行一些计算的时候,可以用上一节的 getters 配置项。

但是不同的组件对 store/index.js 里的数据想有不同的计算操作。于是在computed中对 **this. s t o r e . s t a t e . x x x ∗ ∗ 进行一些简单的计算,(注意如果在插值语法中就不需要写 t h i s ,直接写 store.state.xxx** 进行一些简单的计算,(注意如果在插值语法中就不需要写this,直接写 store.state.xxx进行一些简单的计算,(注意如果在插值语法中就不需要写this,直接写store.state )。

当 this. s t o r e . s t a t e . x x x 使用的多了以后我们就开始思考,有没有什么办法可以不写共有部分的 t h i s . store.state.xxx 使用的多了以后我们就开始思考,有没有什么办法可以不写共有部分的this. store.state.xxx使用的多了以后我们就开始思考,有没有什么办法可以不写共有部分的this.store.state。vue就提供了mapState 与 mapGetters方法。

补:ES6语法

let obj2 = {x:100, y:200}
let obj1 = {
	a:1,
	b:2,
	...obj2,
	c:3
}

mapState使用

  • 写法一:借助mapState生成计算属性,从state中读取数据(对象写法)

在这里插入图片描述

如果自己写计算属性的话,在开发工具中, 会算作计算属性。如果是用vuex,他会:但其实也是算作计算属性的

在这里插入图片描述

请注意:这里不可以简写。对象里面是 key:value,而这里找的不是sum变量 key: sum,而是用sum这个名称找, key:‘sum’。以及虽然key肯定是字符串,但是可以不用写单引号

在这里插入图片描述

  • 写法二:数组写法

在这里插入图片描述

mapGetters

在这里插入图片描述

总结

mapState和mapGetters写在组件的computed属性中。

先引入 import {mapState,mapGetters} from 'vuex'

1、mapState方法: 用于帮我们映射state中的数据为计算属性

2、mapGetters方法: 用于帮我们映射getters中的数据为计算属性

06 mapActions 与 mapMutations

mapMutations

HTML:

<button @click="increment(n)">+</button>

如果这里不传参,在点击了之后 他会自动传递一个参数 event

引入:

import {mapMutations} from 'vuex'

methods:

对象写法

在这里插入图片描述

数组写法:

...mapMutations(['JIA', 'JIAN'])
// 要和 mutations中保持一致

mapActions

在这里插入图片描述

总结

1、 mapActions方法:用于帮助我们生成与actions对话的方法,即包含 $store.dispatch(xxx) 的函数

2、mapMutations方法:用于帮助我们生成与mutations对话的方法,即包含$store.commit(xxx) 的函数

备注: mapActions与mapMutations使用时,若需要传递参数需要:在模板中绑定事件时传递好参数,否则参数是事件对象。

07 多组件共享数据

MyPerson组件、MyCount组件

V:\Web\Vue_\myCode_Vue2\vue_test\28_src _多组件共享数据

08 vuex模块化

MyPerson组件(人员相关)、MyCount组件(求和相关)

  • store/index.js

在这里插入图片描述

  • 模块化之后,之前的 MyCount需改为:

    这里只需要加一个命名空间就可以了

在这里插入图片描述

  • MyPerson需改为:

state中的数据,getters中的计算属性,commit,dispatch

这里不仅仅需要命名空间,每一个是不一样的

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新Java面试题1【2024中级】

互联网大厂面试题 1&#xff1a;阿里巴巴Java面试题 2&#xff1a;阿里云Java面试题-实习生岗 3&#xff1a;腾讯Java面试题-高级 4&#xff1a;字节跳动Java面试题 5&#xff1a;字节跳动Java面试题-大数据方向 6&#xff1a;百度Java面试题 7&#xff1a;蚂蚁金服Java…

深入理解 Hadoop 上的 Hive 查询执行流程

在 Hadoop 生态系统中&#xff0c;Hive 是一个重要的分支&#xff0c;它构建在 Hadoop 之上&#xff0c;提供了一个开源的数据仓库系统。它的主要功能是查询和分析存储在 Hadoop 文件中的大型数据集&#xff0c;包括结构化和半结构化数据。Hive 在数据查询、分析和汇总方面发挥…

java数组与集合框架(一) -- 数据结构,数组

数据结构 概述 为什么要讲数据结构&#xff1f; 任何一个有志于从事IT领域的人员来说&#xff0c;数据结构&#xff08;Data Structure&#xff09;是一门和计算机硬件与软件都密切相关的学科&#xff0c;它的研究重点是在计算机的程序设计领域中探讨如何在计算机中组织和存储…

CQI-17:2021 V2 英文 、中文版。特殊过程:电子组装制造-锡焊系统评审标准

锡焊作为一个特殊的工艺过程&#xff0c;由于其材料特性的差异性、工艺参数的复杂性和过程控制的不确定性&#xff0c;长期以来一直视为汽车零部件制造业的薄弱环节&#xff0c;并将很大程度上直接导致整车产品质量的下降和召回风险的上升。 美国汽车工业行动集团AIAG的特别工…

154 Linux C++ 通讯架构实战9 ,信号功能添加,信号使用sa_sigaction 回调,子进程添加,文件IO详谈,守护进程添加

初始化信号 使用neg_init_signals(); 在nginx.cxx中的位置如下 //(3)一些必须事先准备好的资源&#xff0c;先初始化ngx_log_init(); //日志初始化(创建/打开日志文件)&#xff0c;这个需要配置项&#xff0c;所以必须放配置文件载入的后边&#xff1b;//(4)一些初…

Hello算法8:堆

Hello算法8&#xff1a;堆 定义 堆heap是满足特定条件的完全二叉树(只有最底层节点未填满&#xff0c;且节点靠左填充)&#xff0c;主要有以下两种&#xff1a; 大顶堆&#xff1a;任意节点的值≥其子节点的值 小顶堆&#xff1a;任意节点的值≤子节点的值 堆的常用操作 方…

最小覆盖子串-java

最小覆盖子串-java 题目描述 : 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必…

阿里云2核4G云服务器支持多少人同时在线?并发数计算?

阿里云2核4G服务器多少钱一年&#xff1f;2核4G配置1个月多少钱&#xff1f;2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

语音识别:基于HMM

HMM语音识别的解码过程 从麦克风采集的输入音频波形被转换为固定尺寸的一组声学向量&#xff1a; 其中是维的语音特征向量&#xff08;例如MFCC&#xff09;。 解码器尝试去找到上述特征向量序列对应的单词&#xff08;word&#xff09;的序列&#xff1a; 单词序列的长度是。…

HAProxy + Vitess负载均衡

一、环境搭建 Vitess环境搭建&#xff1a; 具体vitess安装不再赘述&#xff0c;主要是需要启动3个vtgate&#xff08;官方推荐vtgate和vtablet数量一致&#xff09; 操作&#xff1a; 在vitess/examples/common/scripts目录中&#xff0c;修改vtgate-up.sh文件&#xff0c;…

计算机网络——32差错检测和纠正

差错检测和纠正 错误检测 EDC 差错检测和纠错位&#xff08;冗余位&#xff09; D 数据由差错检测保护&#xff0c;可以包含头部字段 错误检测不是100%可靠的 协议会泄露一些错误&#xff0c;但是很少更长的EDC字段可以得到更好的检测和纠正效果 奇偶校验 单bit奇偶校验 …

opejdk11 java 启动流程 java main方法怎么被jvm执行

java启动过程 java main方法怎么被jvm执行 java main方法是怎么被jvm调用的 1、jvm main入口 2、执行JLI_Launch方法 3、执行JVMInit方法 4、执行ContinueInNewThread方法 5、执行CallJavaMainInNewThread方法 6、创建线程执行ThreadJavaMain方法 7、执行ThreadJavaMain方法…

YOLOv9改进策略 :主干优化 | ConvNeXtV2:适应自监督学习,让 CNN “再一次强大”?

💡💡💡本文改进内容:完全卷积掩码自编码器框架 ConvNeXt V2,它显著提高了纯convnet在各种识别基准上的性能,包括ImageNet分类,COCO目标检测和ADE20k分割。还提供了各种尺寸的预训练ConvNeXt v2模型,从而在ImageNet上具有76.7%精度的3.7M Atto model和88.9%精度的650…

CrossOver软件2024免费 最新版本详细介绍 CrossOver软件好用吗 Mac电脑玩Windows游戏

CrossOver是一款由CodeWeavers公司开发的软件&#xff0c;它可以在Mac和Linux等操作系统上运行Windows软件&#xff0c;而无需在计算机上安装Windows操作系统。这款软件的核心技术是Wine&#xff0c;它是一种在Linux和macOS等操作系统上运行Windows应用程序的开源软件。 Cross…

本地虚拟机服务器修改站点根目录并使用域名访问的简单示例

说明&#xff1a;本文提及效果是使用vmware虚拟机&#xff0c;镜像文件是Rocky8.6 一、配置文件路径 1. /etc/httpd/conf/httpd.conf #主配置文件 2. /etc/httpd/conf.d/*.conf #调用配置文件 调用配置文件的使用&#xff1a; vim /etc/httpd/conf.d/webpage.conf 因为在主配…

【STM32 HAL库SPI/QSPI协议学习,基于外部Flash读取。】

1、SPI协议 简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface)&#xff0c;即串行外围设备接口&#xff0c;是 一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间&#xff0c;要求通讯速率 较高的场合。 SPI 物理层 SPI 通讯…

【讲解下Docker in Docker的原理与实践】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

elementUI this.$msgbox msgBox自定义 样式自定义 富文本

看这个效果是不是很炫?突出重点提示内容,对于用户交互相当的棒! 下来说说具体实现: let self = this const h = self.$createElement; this.$msgbox({title: null,message: h("p", {style: "margin-top:10px"}, [h("i", {class: "el-i…

Linux——将云服务器作为跳板机,frp实现内网穿透

文章目录 操作步骤1. 准备工作&#xff1a;2. 配置frp服务器端&#xff1a;3. 配置frp客户端&#xff1a;4. 启动frp客户端&#xff1a;5. 测试连接&#xff1a;6. 安全注意事项&#xff1a; 云服务器性能分析阿里云具体操作步骤1. 购买&#xff1a;2. 登录&#xff1a;3. 首次…

Redis 慢日志

Redis慢日志 1.Redis 慢查询日志概述 客户端从发送命令到获取返回结果经过了以下几个步骤&#xff1a; 客户端发送命令该命令进入 Redis 队列排队等待执行Redis 开始执行命令 - Redis 命令执行完成命令执行结果返回给客户端 Redis 慢查询日志统计的时间&#xff0c;只包含第…