当前位置: 首页 > news >正文

学习笔记之Vuex(五)

Vuex

    • (五)Vuex
      • 一、什么是Vuex
      • 二、Vuex工作原理
      • 三、搭建Vuex环境
      • 四、求和案例分析
        • 4.1 求和案例——vue实现
        • 4.2 求和案例——vuex实现

(五)Vuex

一、什么是Vuex

1.概念

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

在多组件中要共享数据 x,是由全局事件总线实现的,这样做会很麻烦,每个组件之间都要进行全局事件绑定,如下图所示:

image-20230225012815359

但是如果使用Vuex实现,就需要把 x 提取到vuex中,所有组件就都可以使用,如下图所示:

image-20230225013034369

Github 地址: https://github.com/vuejs/vuex

2.什么时候使用 Vuex

  • 多个组件依赖于同一状态;
  • 来自不同组件的行为需要变更同一状态。

二、Vuex工作原理

image-20230225013149912

Vuex有三个重要的组成部分:

  • actions(行为):发送ajax请求
  • mutations(加工)
  • state(状态):数据所在处

将数据写入state中后,由vc实例对象调用dispatch()方法,然后就会引起actions中对应函数的调用,之后再其中调用commit()方法,然后就会引起mutations中对应函数的调用,这个函数中就有state和所传参数,然后自动就会继续mutate,改变state中的数据,最后就会重新解析渲染。

image-20230225115257087

如果出现需要其他服务器传入参数,就需要在actions中进行,发送Ajax请求,但是如果对于参数已知,可以直接跳过actions,通过直接调用commit()方法到mutations。

Vuex中三个重要的组成部分的类型都是对象,它们都是在store下面进行管理的,也就是说dispatch()方法、commit()方法都是store提供的。

(1)state

  • vuex 管理的状态对象;

  • 它应该是唯一的;

  • 示例代码:

    image-20230225123028173

(2)actions

  • 值为一个对象,包含多个响应用户动作的回调函数;

  • 通过 commit( )来触发 mutation 中函数的调用, 间接更新 state;

  • 如何触发 actions 中的回调?

    在组件中使用: $store.dispatch('对应的 action 回调名') 触发

  • 可以包含异步代码(定时器, ajax 等等);

  • 示例代码:

    image-20230225123021239

(3)mutations

  • 值是一个对象,包含多个直接更新 state 的方法

  • 谁能调用 mutations 中的方法?如何调用?

    在 action 中使用:commit('对应的 mutations 方法名')触发;

  • mutations 中方法的特点:不能写异步代码、只能单纯的操作 state;

  • 示例代码:

    image-20230225123247198

三、搭建Vuex环境

1.安装vuex

由于在2022年2月7日,vue3称为了默认版本,如果执行npm i vue,就会直接安装为vue3的了,vue3的默认版本是vuex4,vue2的默认版本是vuex3,如果在vue2项目中安装vuex4版本就会报错:

image-20230225120906392

所以vue2中,要用vuex的3版本,vue3中,要用vuex的4版本。

指定版本安装: npm i vuex@3

2.使用步骤:

(1)创建文件:src/store/index.js,该文件用于创建Vuex中最为核心的store;

//引入Vue核心库
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用Vuex插件
Vue.use(Vuex)//准备actions对象一响应组件中用户的动作
const actions = {}
//准备mutations对象一修改state中的数据
const mutations = {}
//准备state对象一保存具体的数据
const state = {}//创建并暴露store
export default new Vuex.Store({actions, mutations,state
)}

(2)在main.js中创建vm时传入store配置项。

......
//引入store
import store from ' ./store "
......//创建vm	
new Vue({el:'#app',render: h =》h(App),store
})

注意:vue脚手架在执行的时候,会扫描整个文件,然后将所有的import语句先执行,所以就需要在src/store/index.js文件中引用并使用Vuex。

搭建完毕后,在vc中就会出现store:

image-20230225122503901

四、求和案例分析

4.1 求和案例——vue实现

Count.vue文件:

这里注意在绑定数据的适合,为了传入的数据是数字number,不是字符串String,这里可以使用 v-model.number绑定,或者在value前面加冒号::value="1"

<template><div><h1>当前求和为:{{sum}}</h1><select v-model="n"><!-- 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:'Count',data() {return {n:1, //用户选择的数字sum:0 //当前的和}},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)},}}
</script><style>button{margin-left: 5px;}
</style>

App.vue文件中:

<template><div><Count/></div>
</template><script>//引入组件import Count from './components/Count.vue'export default {name:'App',components:{Count},
}
</script>

页面显示结果:

image-20230225130106423

4.2 求和案例——vuex实现

Count.vue文件:

<template><div><h1>当前求和为:{{$store.state.sum}}</h1><select v-model="n"><!-- 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:'Count',data() {return {n:1, //用户选择的数字}},methods:{//前面两个函数中什么添加也没有,所以可以直接通过commit写在mutations中increment(){this.$store.commit('JIA',this.n)},decrement(){this.$store.commit('JIAN',this.n)},incrementOdd(){this.$store.dispatch('jiaOdd',this.n)},incrementWait(){this.$store.dispatch('jiaWait',this.n)},}}
</script><style>button{margin-left: 5px;}
</style>

App.vue文件中:

<template><div><Count/></div>
</template><script>//引入组件import Count from './components/Count.vue'export default {name:'App',components:{Count},
}
</script>

main.js文件中:

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//引入插件
import VueResource from 'vue-resource'
//引入store
import store from './store'//关闭Vue的生产提示
Vue.config.productionTip = false
//使用插件
Vue.use(VueResource)//创建vm
new Vue({el:'#app',render: h => h(App),store,beforeCreate() {Vue.prototype.$bus = this},
})

src/store/index.js文件中:

//该文件用于创建Vuex中最为核心的store//引入Vue核心库
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用Vuex插件
Vue.use(Vuex)//准备actions对象一响应组件中用户的动作
const actions = {// //前面两个函数中什么添加也没有,所以可以直接通过commit写在mutations中// jia(context, value) {//     console.log('actions中的jia被调用了')//     context.commit('JIA',value)// },// jian(context, value) {//     console.log('actions中的jian被调用了')//     context.commit('JIAN',value)// },//后面两个函数中都添加了条件jiaOdd(context, value) {console.log('actions中的jiaOdd被调用了')if(context.state.sum % 2){context.commit('JIA',value)}},jiaWait(context, value) {console.log('actions中的jiaWait被调用了')setTimeout(()=>{context.commit('JIA',value)},500)},
}
//准备mutations对象一修改state中的数据
const mutations = {JIA(state,value){console.log('mutations中的JIA被调用了')state.sum += value},JIAN(state,value){console.log('mutations中的JIAN被调用了')state.sum -= value}
}
//准备state对象一保存具体的数据
const state = {sum:0 //当前的和
}//创建并暴露store
export default new Vuex.Store({actions, mutations,state
})

页面显示结果:

image-20230225130658697

相关文章:

学习笔记之Vuex(五)

Vuex&#xff08;五&#xff09;Vuex一、什么是Vuex二、Vuex工作原理三、搭建Vuex环境四、求和案例分析4.1 求和案例——vue实现4.2 求和案例——vuex实现&#xff08;五&#xff09;Vuex 一、什么是Vuex 1.概念 在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一…...

SSM知识快速复习

SSM知识快速复习SpringIOCDIIOC容器在Spring中的实现常用注解Autowired注解的原理AOP相关术语作用动态代理实现原理事务Transactional事务属性&#xff1a;只读事务属性&#xff1a;超时事务属性&#xff1a;回滚策略事务属性&#xff1a;事务隔离级别事务属性&#xff1a;事务…...

【Linux】安装MySQL

目录 1.检测当前系统是否安装过MySQL相关数据库 2. 卸载现有的MySQL数据库 3.上传解压 4.顺序安装rpm包 5.启动MySQL 6.查看临时密码 7.登录MySQL 8.开放端口 1.检测当前系统是否安装过MySQL相关数据库 需要通过rpm相关指令&#xff0c;来查询当前系统中是否存在已安…...

【深度学习】手把手教你开发自己的深度学习模板

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言1数据相关1.1 数据初探1.2.数据处理1.3 数据变形2 定义网络&#xff0c;优化函数3. 训练前言 入坑2年后&#xff0c;重新梳理之前的知识&#xff0c;发现其实需…...

一个诡异的 Pulsar InterruptedException 异常

背景 今天收到业务团队反馈线上有个应用往 Pulsar 中发送消息失败了&#xff0c;经过日志查看得知是发送消息时候抛出了 java.lang.InterruptedException 异常。 和业务沟通后得知是在一个 gRPC 接口中触发的消息发送&#xff0c;大约持续了半个小时的异常后便恢复正常了&…...

Java岗面试题--Java并发(volatile 专题)

目录1. 面试题一&#xff1a;谈谈 volatile 的使用及其原理补充&#xff1a;内存屏障volatile 的原理2. 面试题二&#xff1a;volatile 为什么不能保证原子性3. 面试题三&#xff1a;volatile 的内存语义4. 面试题四&#xff1a;volatile 的实现机制5. 面试题五&#xff1a;vol…...

Java---打家劫舍ⅠⅡ

目录 打家劫舍Ⅰ 题目分析 代码一 代码二 打家劫舍Ⅱ 打家劫舍Ⅰ 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被…...

MySQL Lesson4

1&#xff1a;关于查询结果集的去重&#xff08;distinct&#xff09; select distinct job from emp; **distinct只能出现在所有字段的最前面。所表示的含有是所有的结果联合起来去重。 select distinct deptno,job from emp order by deptno; select count(distinct job)from…...

浅谈权限获取方法之文件上传

概述 文件上传漏洞是发生在有上传功能的应用中&#xff0c;如果应用程序对用户的上传文件没有控制或者存在缺陷&#xff0c;攻击者可以利用应用上传功能存在的缺陷&#xff0c;上传木马、病毒等有危害的文件到服务器上面&#xff0c;控制服务器。 漏洞成因及危害 文件上传漏…...

资产设备防拆标签安全防护和资产定位解决方案

随着社会经济的发展和高新技术的日新月异&#xff0c;对各方面的安全要求也在不断地提高&#xff0c;以物联网安防、入侵报警和出入口控制、应急系统等为主的安全防范系统日益成为各类文物场所智能化弱电工程不可或缺的组成部分&#xff0c;是重点资产管理场所内加强管理和安全…...

企业电子招标采购源码之电子招标投标全流程!

随着各级政府部门的大力推进&#xff0c;以及国内互联网的建设&#xff0c;电子招投标已经逐渐成为国内主流的招标投标方式&#xff0c;但是依然有很多人对电子招投标的流程不够了解&#xff0c;在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同&#xff0…...

【考研408】计算机网络笔记

文章目录计算机网络体系结构计算机网络概述计算机网络的组成计算机网络的功能计算机网络的分类计算机网络的性能指标课后习题计算机网络体系结构与参考模型计算机网络协议、接口、服务的概念ISO/OSI参考模型和TCP/IP模型课后习题物理层通信基础基本概念奈奎斯特定理与香农定理编…...

[C++]继承

&#x1f941;作者&#xff1a; 华丞臧 &#x1f4d5;​​​​专栏&#xff1a;【C】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449;LeetCode 文章目录一、继承…...

优化知识管理方法丨整理零碎信息,提高数据价值

信息流时代&#xff0c;知识成集合倍数增长&#xff0c;看似我们学习了很多知识&#xff0c;但知识零碎无系统&#xff0c;知识之间缺乏联系&#xff0c;没有深度&#xff0c;所以虽然你很努力&#xff0c;但你发现自己的能力增长特别缓慢&#xff0c;你需要整理知识将零散的知…...

Windows操作系统的体系结构、运行环境和运行状态

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。说Windows操作系统的运行环境和运行状态&#xff0c;首先要介绍一下Windows操作系统的体系结构&#xff0c;然后再要说到最重要的两个概念:核…...

【工作笔记】Http响应头过长

起因 突然有测试小伙伴反馈进公司官网主页会白屏&#xff0c;但只是个例不是普遍现象 查监控发现没监控到异常问题 查了很久&#xff08;这个很久单指对于线上问题来说&#xff09;才定位是请求的异常&#xff0c;因为这套系统的异常用的是 ExceptionHandler&#xff0c;这也导…...

hive建分区表,分桶表,内部表,外部表

hive建分区表&#xff0c;分桶表&#xff0c;内部表&#xff0c;外部表 一、概念介绍 Hive是基于Hadoop的一个工具&#xff0c;用来帮助不熟悉 MapReduce的人使用SQL对存储在Hadoop中的大规模数据进行数据提取、转化、加载。Hive数据仓库工具能将结构化的数据文件映射为一张数…...

【分享】灌溉制度设计小程序VB源代码

说明 根据作物需水特性和当地气候、土壤、农业技术及灌水技术等因素制定的灌水方案。主要内容包括灌水次数、灌水时间、灌水定额和灌溉定额。灌溉制度是规划、设计灌溉工程和进行灌区运行管理的基本资料&#xff0c;是编制和执行灌区用水计划的重要依据。 1—计划湿润土层允…...

PR9268/300-000库存现货振动传感器 雄霸工控

PR9268/300-000库存现货振动传感器 雄霸工控PR9268/300-000库存现货振动传感器 雄霸工控SDM010PR9670/110-100PR9670/010-100PR9670/003-000PR9670/002-000PR9670/001-000PR9670/000-000PR9600/014-000PR9600/011-000PR9376/010-021PR9376/010-011PR9376/010-011PR9376/010-001…...

浅谈模型评估选择及重要性

作者&#xff1a;王同学 来源&#xff1a;投稿 编辑&#xff1a;学姐 模型评估作为机器学习领域一项不可分割的部分&#xff0c;却常常被大家忽略&#xff0c;其实在机器学习领域中重要的不仅仅是模型结构和参数量&#xff0c;对模型的评估也是至关重要的&#xff0c;只有选择那…...

多线程的初识和创建

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; ✨每日一语&#xff1a;知不足而奋进&#xff0c;望远山而前行。 目 录&#x1f4a4;一. 认识线程&#xff08;Thread&#xff09;&#x1f34e;1. 线程的引入&#x1f34f;2. 线程…...

一句话设计模式3:工厂模式

工厂模式:new多种对象的简单方式。 文章目录 工厂模式:new多种对象的简单方式。前言一、两种工厂模式二、如何实现工厂模式1. 简单工厂2. 抽象工厂总结前言 工厂模式可以说比较常见的设计模式,仔细观察在很多源码中都有此种模式的应用;用来解决创建对象的创建问题; 一、两种工…...

【Codeforces Round #853 (Div. 2)】C. Serval and Toxel‘s Arrays【题解】

题目 Toxel likes arrays. Before traveling to the Paldea region, Serval gave him an array aaa as a gift. This array has nnn pairwise distinct elements. In order to get more arrays, Toxel performed mmm operations with the initial array. In the iii-th opera…...

100天精通Python(数据可视化篇)——第77天:数据可视化入门基础大全(万字总结+含常用图表动图展示)

文章目录1. 什么是数据可视化&#xff1f;2. 为什么会用数据可视化&#xff1f;3. 数据可视化的好处&#xff1f;4. 如何使用数据可视化&#xff1f;5. Python数据可视化常用工具1&#xff09;Matplotlib绘图2&#xff09;Seaborn绘图3&#xff09;Bokeh绘图6. 常用图表介绍及其…...

PMP考前冲刺2.27 | 2023新征程,一举拿证

题目1-2&#xff1a;1.在产品开发过程中&#xff0c;项目发起人向项目团队推荐了一种新材料&#xff0c;新材料比现有的材料更便宜而且性能更好。如果团队采用新材料&#xff0c;不但有利于提升产品质量&#xff0c;而且可以显著降低成本。项目经理应该怎么办?A.采用新材料&am…...

【C++】map和set的封装(红黑树)

map和set的封装一、介绍二、stl源码剖析三、仿函数获取数值四、红黑树的迭代器五、map的[]5.1 普通迭代器转const迭代器六、set源码七、map源码八、红黑树源码一、介绍 首先要知道map和set的底层都是用红黑树实现的 【数据结构】红黑树 set只需要一个key&#xff0c;但是map既…...

【批处理脚本】-1.14-移动文件(夹)命令move

"><--点击返回「批处理BAT从入门到精通」总目录--> 共10页精讲(列举了所有move的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,…...

逻辑地址和物理地址转换

在操作系统的学习中&#xff0c;很多抵挡都会涉及虚拟地址转换为物理地址的计算&#xff0c;本篇就简单介绍一下在分页存储管理、分段存储管理、磁盘存储管理中涉及的地址转换问题。 虚拟地址与物理地址 编程一般只有可能和逻辑地址打交道&#xff0c;比如在 C 语言中&#x…...

HyperGBM用4记组合拳提升AutoML模型泛化能力

本文作者&#xff1a;杨健&#xff0c;九章云极 DataCanvas 主任架构师 如何有效提高模型的泛化能力&#xff0c;始终是机器学习领域的重要课题。经过大量的实践证明比较有效的方式包括&#xff1a; 利用Early Stopping防止过拟合通过正则化降低模型的复杂度使用更多的训练数…...

P6软件中的前锋线设置

卷首语 所谓前锋线&#xff0c;是指从评估时刻的时标点出发&#xff0c;用点划线一次连接各项活动的实际进展位置所形成的的线段&#xff0c;其通常为折线。 关键路径法 前锋线比较法&#xff0c;是通过在进度计划中绘制实际进度前锋线以判断活动实际进度与计划进度的偏差&a…...

北京网站建设管庄/推广方案有哪些

有越来越多的用户喜欢win10系统了。在日常的安装和使用过程中&#xff0c;免不了总能碰见win10系统不能运行java提示“应用程序已被安全设置被阻止”的问题。面对突然出现的win10系统不能运行java提示“应用程序已被安全设置被阻止”的问题&#xff0c;对于一些仅仅将电脑作为工…...

公装网站怎么做/南宁百度seo排名价格

1.diff命令 (1)diff比对文件夹 diff -r 文件夹1 文件夹2 > 对比信息的文件 diff -r a b > test.log &#xff08;2&#xff09;diff比对文件 diff 文件1 文件2 > 对比信息的文件 diff a.c b.c > test.log 2.path命令 &#xff08;1&#xff09;...

帮朋友做网站的坑/网页搜索快捷键是什么

开启自启自定义服务&#xff1a; 1、拷贝一份服务配置文件 cp /etc/systemd/system/aliyun.service /etc/systemd/system/zhangkai.service 2内容自定义&#xff1a;如下示例&#xff1a; [Unit] Descriptionzhangkai test Afternetwork-online.target Wantsnetwork-onl…...

如何做网站 seo/今天热点新闻

1 序列化与反序列化 如果要将一个系统内的数据通过网络传输给其它系统或客户端&#xff0c;我们通常都需要先把这些数据转化为字符串或字节串&#xff0c;而且需要规定一种统一的数据格式才能让数据接收端正确解析并理解这些数据的含义。XML是早期被广泛使用的数据交换格式&…...

曲靖网站制作一条龙/百度云群组

转自&#xff1a;http://blog.chinaunix.net/space.php?uid22600159&doblog&id2124188 HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理&#xff0c;支持虚拟主机&#xff0c;它是免费、快速并且可靠的一种解决方案。根据官方数据&#xff0c;其最高极限支…...

武汉地区做网站/搜索引擎大全排行

实现类似Android风云直播手机端注册登录页&#xff0c;当手势向下滑动的时候&#xff0c;关闭页面的效果。使用GestureDetector来实现这个效果&#xff0c;当手势在屏幕上面滑动的时候 &#xff0c;会掉用onFling方法&#xff0c;所以&#xff0c;在这个方法里面做判断和操作即…...