Vue之VueX知识探索(一起了解关于VueX的新世界)

目录

前言

一、VueX简介

1. 什么是VueX

2. VueX的作用及重要性

3. VueX的应用场景

二、VueX的使用准备工作

1. 下载安装VueX

2. vuex获取值以及改变值

2.1 创建所需示例

 2.2 将创建好的.vue文件页面显示

 2.3 创建VueX的相关文件

 2.4 配置VueX四个js文件

 2.5 加载到vue示例中

 三、VueX获取值及改变值

3.1 获取值

 work1.vue

 state.js

方式一:(不推荐)

 方式二:

3.2 改变值

work1.vue

mutation.js

效果

3.3 跨页面传值

work2.vue

效果

四、VueX之异步请求

1. 什么是异步请求

4.2 异步请求与同步请求的区别

 4.3 异步请求与同步请求的好处

4.4  异步请求与同步请求的使用情况

4.5 案例演示

模拟一:

work1.vue

actions.js

效果

模拟二:异步请求后台

work1.vue

actions.js

 请求路径

 直接运行结果

 优化后的请求后台

work1.vue

actions.js

效果


前言

        在上一期以及之前几期的博客中我们都是分享了有关ElementUI在Vue中的一些知识点运用以及案例演示,在往前还分享了像组件通信之类的Vue知识。今天我给老铁们带来的是是与组件通信有关,今天分享的是VueX。

一、VueX简介

1. 什么是VueX

        VueX 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以可预测的方式进行状态的变更。VueX 基于 Flux 和 Redux 架构的思想,通过单向数据流的方式来管理应用中的状态。

        在 VueX 中,状态被存储在一个被称为「store」的容器中,组件可以通过提交(commit)一些特定的「mutations」来改变这个状态。这种改变是同步的,并且由 VueX 确保所有的状态变更都是可跟踪的。此外,VueX 也支持异步操作,通过触发(dispatch)一些特定的「actions」来处理异步的逻辑。最后,通过使用「getters」,组件可以从 store 中获取状态,以便在应用中使用。

2. VueX的作用及重要性


作用及重要性体现在一下几个方面:

  1. 状态集中管理:VueX 提供了一个全局的状态容器(store),将应用程序的状态集中管理起来。通过单一的状态树,可以追踪和调试整个应用程序的状态变化。这样可以避免状态分散、逻辑混乱的问题,提高开发效率和可维护性。

  2. 组件间通信和共享状态:在大型应用中,多个组件可能需要共享相同的状态数据。VueX 提供了一种统一的状态管理机制,允许多个组件直接访问和修改状态,取代了传统的组件间的事件传递、属性传递等繁琐的通信方式。这样可以简化组件之间的数据传递,提高组件的可复用性。

  3. 异步操作和状态管理:在实际应用中,很多情况下需要处理异步的逻辑,例如发送网络请求、异步数据获取等。VueX 提供了「actions」来处理异步操作,保证异步操作和状态的一致性。这使得应用程序中的异步逻辑更可控、更易于管理。

  4. 易于调试和追踪:VueX 提供了开发者工具集成,可以轻松地调试和追踪状态的变化。通过开发者工具的支持,可以查看每个状态的变化、时间旅行回放等,更方便地定位问题和进行性能优化。

        总之,VueX 的作用和重要性在于提供了一种集中、可预测和可维护的方式来管理和共享应用程序的状态。它解决了多个组件之间通信和状态共享的问题,简化了应用的复杂性,提高了开发效率和可维护性。在大型应用程序中,使用 VueX 可以更好地组织和管理状态,提供更好的用户体验和开发体验。

3. VueX的应用场景

  1. 大型应用程序:当应用程序规模较大,有很多组件需要共享状态或进行复杂的状态管理时,VueX 可以帮助更好地组织和管理状态,简化组件间的通信和数据传递。

  2. 跨组件通信:当多个组件需要共享相同的状态数据或进行信息传递时,VueX 提供了一个集中的状态存储,可以让这些组件直接访问和修改状态,取代传统的事件传递或属性传递的方式。

  3. 异步操作和请求管理:当应用程序需要处理大量的异步操作、网络请求或数据获取时,VueX 提供了「actions」来处理异步逻辑,保证异步操作和状态的一致性,并提供了便捷的调试工具。

  4. 路由状态管理:当应用程序有复杂的路由结构时,需要存储和管理当前路由状态、页面状态等信息时,VueX 可以方便地管理和同步这些信息,使路由状态管理更加简单和可控。

  5. 全局状态管理:当应用程序需要维护一些全局的状态,例如用户登录信息、主题样式等,VueX 提供了一个统一的状态容器,方便在不同组件间进行状态的读写和更新。

注意:

        使用 VueX 也需要根据实际情况进行评估。在简单的小型应用中,使用 VueX 可能会带来额外的复杂性。因此,在选择使用 VueX 时,需要根据具体的项目需求、规模和复杂度来决策。

        

二、VueX的使用准备工作

1. 下载安装VueX

安装指令:

npm install vuex -S   ===》node.js10

npm i -S vuex@3.6.2 ===>node.js18

在项目目录下的终端窗口中输入即可

2. vuex获取值以及改变值

2.1 创建所需示例

        在views文件中创建VueX文件由于存放示例,在VueX文件中创建两个.vue文件模拟获取值及改变值,以及配置其路由关系。

 

 2.2 将创建好的.vue文件页面显示

在左侧树形菜单中添加

 2.3 创建VueX的相关文件

        在src的文件目录下创建一个store文件夹,在文件中创建四个文件分别是state.js、index.js、mutations.js、actions.js、getters.js四个文件

 

 2.4 配置VueX四个js文件

在store中index.js中配置

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'
import actions from './actions'
import mutations from './mutations'
Vue.use(Vuex)
const store = new Vuex.Store({state,getters,actions,mutations})export default store

 2.5 加载到vue示例中

 三、VueX获取值及改变值

3.1 获取值

 work1.vue
<template><div style="padding: 60px;"><h1>君易第一页面</h1><p>改变state.js文件中的值</p><button @click="fun1">获取</button><button @click="fun2">改变</button></div>
</template><script>export default{data(){return{msg:'君易01'}},methods:{fun1(){// 方式一let eduName =this.$store.state.eduName;alert(eduName);},fun2(){}}}
</script><style>
</style>
 state.js
export default{//定义变量eduName:'君易'
}
方式一:(不推荐)

 this.$store-->store/index.js

 方式二:

  let eduName =this.$store.state.eduName;

 

3.2 改变值

work1.vue
<template><div style="padding: 60px;"><h1>君易第一页面</h1><p>改变state.js文件中的值</p>输入改变后的值 &nbsp;<input v-model="msg" /><button @click="fun1">获取</button><button @click="fun2">改变</button></div>
</template><script>export default{data(){return{msg:'君易01'}},methods:{fun1(){// 方式一let eduName =this.$store.state.eduName;alert(eduName);},fun2(){this.$store.commit('setEduName',{eduName:this.msg})}}}
</script><style>
</style>
mutation.js
export default{setEduName:(state,payload)=>{//设置变量//代指state.js文件导出的对象// payload就是传递的参数state.eduName=payload.eduName;}
}
效果

3.3 跨页面传值

work2.vue
<template><div><h1>君易第二页面</h1>{{eduName}}</div>
</template><script>export default {data() {return {msg: '君易02'}},computed: {eduName() {return this.$store.state.eduName;}}}
</script><style>
</style>
效果

四、VueX之异步请求

1. 什么是异步请求

        在 Vue.js 应用程序中,Vuex 是一个用于应用程序状态管理的官方库。异步请求是指在应用程序中进行异步操作,如获取数据或向服务器发送数据并等待响应。在 Vuex 中,你可以使用异步 action 来处理异步请求。

        在 Vuex 中,可以定义 actions,其中可以包含异步操作。这些 actions 被调用时可以触发对应的 mutations 来修改状态。通常,在 actions 中执行异步操作,比如发送网络请求和处理响应。

        在异步操作中,可以使用异步的方式发送网络请求,如使用 Axios 或 Fetch API 这样的库。在请求成功或失败后,可以根据响应的结果触发对应的 mutations 更新状态。

通过使用异步 action,Vuex 管理应用程序状态的同时,还能处理复杂的异步操作,如加载数据、提交表单或与后端API进行通信。这样可以在状态管理中保持一致性,并且更好地追踪和管理数据流。

        总之,Vuex 的异步请求指的是在应用程序中使用异步 action 处理异步操作,如发送网络请求并处理响应。

4.2 异步请求与同步请求的区别

在VueX中,同步请求和异步请求的区别主要体现在数据处理和更新状态的方式上。

  1. 同步请求:在同步请求中,当actions接收到异步操作时,它不会直接进行状态更新。而是需要通过mutations来改变状态。也就是说,同步请求需要通过mutation的commit方法来提交给store,然后store会调用对应的同步mutations方法来修改state中的数据。
  2. 异步请求:在异步请求中,当actions接收到异步操作时,它会通过提交mutation给store,并在mutations中处理异步操作。这个过程中,mutations会使用异步函数来处理异步请求,从而使得state中的数据能够在异步请求完成后自动更新。

总之,在VueX中,同步请求和异步请求的主要区别在于如何处理和更新状态。同步请求需要提交mutation来更新状态,而异步请求则可以使用异步函数来处理异步操作并在完成后自动更新状态。

 4.3 异步请求与同步请求的好处

VueX中同步请求和异步请求各有其好处,具体表现如下:

  1. 同步请求:可以按顺序执行代码,不会出现还没执行完就执行下一句代码的混乱情况。同时,同步流程对结果处理通常更为简单,可以就近处理。还有,同步流程对结果的处理始终和前文保持在一个上下文内。另外,同步流程可以很容易捕获、处理异常。
  2. 异步请求:由于异步请求是立即给调用方返回初步的结果,所以具有能够立即响应用户操作的优势。其次,异步请求可以延迟给调用方最终的结果数据,在此期间可以做更多额外的工作,例如结果记录等等。另外,异步流程在执行的过程中,可以释放占用的线程等资源,避免阻塞,等到结果产生再重新获取线程处理。最后,异步流程可以等多次调用的结果出来后,再统一返回一次结果集合,提高响应效率。

综上,VueX中的同步请求和异步请求各有其优点,分别适用于不同的应用场景,需要根据具体需求进行选择和搭配使用。

4.4  异步请求与同步请求的使用情况

        在编程中,选择使用异步请求还是同步请求主要取决于具体的应用场景和需求。

        一般来说,对于那些需要处理耗时操作,如网络请求、文件IO等场景,通常更适合使用异步请求。因为这些操作需要花费一定的时间,如果使用同步请求,程序会一直等待这些操作完成,而无法继续执行其他任务,导致程序效率低下。而异步请求可以让程序在等待这些操作完成的同时,继续执行其他任务,从而提高了程序的效率。

        另一方面,对于那些需要按照一定顺序执行,且不需要等待其他操作的场景,通常更适合使用同步请求。例如,在执行一系列的计算操作时,使用同步请求可以保证这些操作按照预期的顺序执行,不会出现混乱或错误的情况。

        需要注意的是,选择使用异步请求还是同步请求并不是绝对的,需要根据具体的情况进行综合考虑。例如,在某些情况下,使用异步请求可能会导致程序变得复杂难以维护,此时可能需要考虑使用同步请求或者其他的解决方案。

        总之,在编程中,选择使用异步请求还是同步请求需要根据具体的应用场景和需求进行权衡,选择最适合的方案。

4.5 案例演示

模拟一:

work1.vue
<template><div style="padding: 60px;"><h1>君易第一页面</h1><p>改变state.js文件中的值</p>输入改变后的值 &nbsp;<input v-model="msg" /><button @click="fun1">获取</button><button @click="fun2">改变</button><button @click="fun3">改变state的值</button><p>获取state的值</p></div>
</template><script>export default {data() {return {msg: '君易01'}},methods: {fun1() {// 方式一let eduName = this.$store.state.eduName;alert(eduName);},fun2() {this.$store.commit('setEduName', {eduName: this.msg})},fun3() {this.$store.dispatch('setEduName', {eduName: this.msg})}}}
</script><style>
</style>
actions.js
export default{setEduNameAsync:(context,payload)=>{//设置变量setTimeout(function(){context.commit('setEduName',payload);},10000);}
}
效果

模拟二:异步请求后台

work1.vue
<template><div style="padding: 60px;"><h1>君易第一页面</h1><p>改变state.js文件中的值</p>输入改变后的值 &nbsp;<input v-model="msg" /><button @click="fun1">获取</button><button @click="fun2">改变</button><p>获取state的值</p><button @click="fun3">改变state的值</button><button @click="fun4">模拟后台请求异步请求</button></div>
</template><script>export default {data() {return {msg: '君易01'}},methods: {fun1() {// 方式一let eduName = this.$store.state.eduName;alert(eduName);},fun2() {this.$store.commit('setEduName', {eduName: this.msg})},fun3() {this.$store.dispatch('setEduNameAsync', {eduName: this.msg})},fun4() {s this.$store.dispatch('setEduNameAjax', {eduName: this.msg})}}}
</script><style>
</style>
actions.js
export default {setEduNameAsync: (context, payload) => { //设置变量setTimeout(function() {context.commit('setEduName', payload);}, 10000);},setEduNameAjax: (context, payload) => { //设置变量let url = this.axios.urls.VUEX_AJAX;let params = {}resturantName: payload.eduNamethis.axios.post(url, params).then(r => {// 打印console.log(r);}).catch(e => {});}
}
 请求路径

 直接运行结果

这是this关键字在vue实例转到vuex中失效,将this作为参数传过去即可。

 优化后的请求后台

work1.vue
<template><div style="padding: 60px;"><h1>君易第一页面</h1><p>改变state.js文件中的值</p>输入改变后的值 &nbsp;<input v-model="msg" /><button @click="fun1">获取</button><button @click="fun2">改变</button><p>获取state的值</p><button @click="fun3">改变state的值</button><button @click="fun4">模拟后台请求异步请求</button></div>
</template><script>export default {data() {return {msg: '君易01'}},methods: {fun1() {// 方式一let eduName = this.$store.state.eduName;alert(eduName);},fun2() {this.$store.commit('setEduName', {eduName: this.msg})},fun3() {this.$store.dispatch('setEduNameAsync', {eduName: this.msg})},fun4() {this.$store.dispatch('setEduNameAjax', {eduName: this.msg,_this:this})}}}
</script><style>
</style>
actions.js
export default {setEduNameAsync: (context, payload) => { //设置变量setTimeout(function() {context.commit('setEduName', payload);}, 10000);},setEduNameAjax: (context, payload) => { //设置变量let _this = payload._this;let url = _this.axios.urls.VUEX_AJAX;let params = {resturantName: payload.eduName}_this.axios.post(url, params).then(r => {// 打印console.log(r);}).catch(e => {});}
}
效果

注意:

如果是使用Dbug启动服务器的话,发送异步请求会发生失效的结果,不使用Dbug启动就不会出现。因为异步请求会失效有时间限制。

 本期分享到此结束,感谢支持。三连加关注哦!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录用命令行将项目打包成war包

记录用命令行将项目打包成war包 找到项目的pom.xml 在当前路径下进入cmd 输入命令 mvn clean package 发现报错了 Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project MMS: Error assembling WAR: webxml attribute is req…

Vuex存值取值与异步请求处理

目录 前言 一、Vuex简介 1.Vuex是什么 2.Vuex的核心概念 3.使用Vuex的好处 4.Vuex执行流程 二、Vuex的使用步骤 1.安装Vuex 2.创建store模块&#xff0c;分别维护state/actions/mutations/getters 3.使用Vuex存储值&#xff0c;获取值和改变值 1.state.js---存值 2.…

VRRP 虚拟路由器冗余协议的解析和配置

VRRP的解析 个人简介 原理和HSRP的差不多&#xff0c;少了一些状态就只有了三种状态 还有不同的就是VRRP严格按照抢占要求 一个VRRP组中具有最高优先级的设备成为Master路由器缺省优先级为100若优先级相同&#xff0c;具有最高接口IP地址最大的路由器成为Master路由器抢占(Pr…

Spring5应用之事务属性

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言事务…

手写Spring系列【一】IOC的简单实现笔记

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;项目专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

docker 的数据管理

docker 容器中数据主要有两种方式 数据卷&#xff08; Data Volumes &#xff09; 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录往载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数据不会影响镜像&#xff0c;从而实现…

【RabbitMQ 实战】11 队列的结构和惰性队列

一、 队列的结构 队列的组成&#xff1a; 队列由 rabbit_amgqueue_process 和 backing_queue两部分组成。rabbit_amqqueue_process负责协议相关的消息处理&#xff0c;即接收生产者发布的消息、向消费者交付消息、处理消息的确认 (包括生产端的 confirm 和消费端的 ack) 等。…

Java架构师部署架构设计

目录 1 导学2 部署架构设计和部署架构图2.1 服务器数量和配置2.2 服务器软件配置2.3 网络环境设计2.4 部署架构图2.5 部署说明文档2.6 部署清单2.7 画部署架构图3 实战整体部署架构设计4 节点部署说明列表5 总结1 导学 本章的主要内容是整体架构设计的核心之一,部署架构设计相…

web 基础和http 协议

一、域名 域名的概念 IP地址不易记忆&#xff0c;域名方便记住&#xff0c;以便于用户进行搜索访问 早期使用Hosts文件解析域名地址 缺点&#xff1a; ① 主机名称重复 ② 主机维护困难 DNS&#xff08;Domain Name System&#xff09;域名系统 ① 分布式 将一个大的数…

08. 机器学习- 线性回归

文章目录 线性回归 LINEAR REGRESSION 从本次课程开始&#xff0c;大部分时候我将不再将打印结果贴出来了&#xff0c;因为太占用篇幅。小伙伴可以根据我的输出执行敲一遍代码来进行学习和验证。 同样是为了节省篇幅&#xff0c;我也不会再一行行那么仔细的解释代码了&#xff…

每日leetcode_LCP01猜数字

每日leetcode_LCP01猜数字 记录自己的成长&#xff0c;加油。 题目出处&#xff1a;LCP 01. 猜数字 - 力扣&#xff08;LeetCode&#xff09; 题目 解题 class Solution {public int game(int[] guess, int[] answer) {int count 0;for (int i 0 ; i< guess.length; i){…

redis 主从复制

配从不配主 主要开启密码 在redis.conf requirepass xxxx 在从机配置 查看主从关系 在主机或从机执行 info replication 注意点 从机可以读&#xff0c;但没有写的权限主从机同时启动&#xff0c; 主机写一个命令&#xff0c;从机复制一个命令 主机开启动&#xff0c;写入命…

Databend join reorder 策略

join order 的重要性 Join order 是指在执行SQL查询时&#xff0c;决定多个表进行 join 的顺序。它是数据库查询优化的一个重要方面&#xff0c;对查询性能和效率有着重要的影响&#xff0c; 不同的 join order 对性能可能有数量级的影响。 优化器优化 join order 的核心流程…

Nacos(替代Eureka)注册中心

Nacos初步学习 Nacos 是一个开源的服务注册和配置中心&#xff0c;它允许您注册、注销和发现服务实例&#xff0c;并提供了配置管理的功能。下面是Nacos的最基础用法&#xff1a; 1. 服务注册和发现&#xff1a; 首先&#xff0c;您需要将您的应用程序或服务注册到Nacos中。…

【LeetCode: 2034. 股票价格波动 | 有序表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

界面组件DevExpress WinForms v23.2新功能预览 - 增强MVVM相关功能

本文主要描述了DevExpress WinForms即将在几个月之后发布的v23.2中包含的新功能&#xff0c;持续关注我们获取更多最新资讯哦~ DevExpress WinForms有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用…

查看本机Arp缓存,以及清除arp缓存

查看Arp缓存目录 Windows 系统使用 winR&#xff0c;输入cmd 在命令窗口输入 arp -a 删除Arp缓存目录 在命令窗口输入 arp -d * 查看主机路由表

ElasticSearch搜索引擎常见面试题总结

一、ElasticSearch基础&#xff1a; 1、什么是Elasticsearch&#xff1a; Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎&#xff0c;每个字段都被索引并可被搜索&#xff0c;可以快速存储、搜索、分析海量的数据。全文检索是指对每一个词建立一个索引&am…

AIGC AI绘画 Midjourney 参数大全详细列表

AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作, Power BI 商业智能 68集, 数据库Mysql8.0 54集 数据库Oracle21C 142集, Office 2021实战, Python 数据分析, ETL Informatica 案例实战 Excel 2021实操,函数大全,图表大全,大屏可视化制作 加技巧500集 数据分析可视化T…

OpenCV中initUndistortRectifyMap ()函数与十四讲中去畸变公式的区别探究

文章目录 1.十四讲中的去畸变公式2. OpenCV中的去畸变公式3. 4个参数和8个参数之间的区别4.initUndistortRectifyMap()函数源码 最近在使用OpenCV对鱼眼相机图像去畸变时发现一个问题&#xff0c;基于针孔模型去畸变时所使用的参数和之前十四讲以及视觉SLAM中的畸变系数有一点不…