Vuex —— 同步和异步请求

news2024/11/20 18:29:45

         上一篇讲到 Vuex 状态管理的内容,先来简单的回顾一下 Vuex ,Vuex 中有五个核心属性:state 、getter、mutation、action、module 。state: 存放数据状态,不能被直接的修改;getter: 基于 state 的计算属性;mutation: 直接更新 state 的多个方法的对象;action: 通过 mutation 间接更新state;module:分模块化; 在上一篇当中就使用异步请求swiperList(轮播列表)数据,认识了state,mutation,action ;那么在本篇就来讲关于 Vuex 中的同步和异步请求!

        首先现来看一下这张图,通过以下的这张图来了解同步和异步请求的流程:

Vuex —— 同步 

         在之前讲过mutations是同步的而actions是异步的,mutations是直接的来修改state,也是唯一能修改状态的而能被Devtools(Vue拓展工具)监控的,当然可以直接的去修改state中的数据状态完全没有问题,但关于对state修改的行为没有被记录,如出现某些问题无法进行排除,所以仅有mutations ——》state 是可取的;

        下面来看这张图,从 Vue Components 中去 commit 提交到 Mutations 去修改 state 的数据,在Mutations中的行为会被 Devtools 所记录,修改完 state 会通过 get/set拦截 更新回去 ; 


流程:Vue Components —— [ commit ] —— Mutations —— State —— Vue Components


1 )Vue Components

在 MusicView.vue 文件中来编写:

<template>
...
<button @click="getSwiperList">同步获取swiperList数据</button>
...
</template>
<script>
import { reqSwiperList } from '@/api'
export default {
  methods: {
    // 获取swiperList数据
    async getSwiperList () {
      const result = await reqSwiperList()
      console.log(result)
    }
  }
}

[ 小白注解:reqSwiperList() 是封装的接口请求函数,如果不知道可以翻看前面的篇目,内容具有渐进性,当然您也可以通过axios的请求方式来代替获取swiperList,在此记得解决跨域问题 ]

        下面来看一下获取数据是否成功?

        拿到数据不是直接去修改state,即this.$store.state.swiperList = result 是不可取的,因为该行为并不会被 Devtools 所记录,所以应该是去提交到 Mutations ;

2 ) [ commit ]

获取数据之后不是赋值修改,而是通过 [commit] 提交到 Mutations 中去修改即可;

...
<script>
import { reqSwiperList } from '@/api'
// import { reqLogin } from '../api'
export default {
  methods: {
    // 获取swiperList数据
    async getSwiperList () {
      const result = await reqSwiperList()
      console.log(result)
      // this.$store.state.swiperList = result  X
      // [commit] 提交
      this.$store.commit('receive_SwiperList', result.data.swiperList)
    }
  }
}
...

commit 的第一个参数就是提交到mutations处理的函数名称,第二个参数就是提交更新的数据;那么通过打印result知道,需要更新的数据就是 result.data.swiperList ,将其提交过去即可,此时不要着急运行查看是否有什么变化,因为 receive_SwiperList 函数还没在mutations中去定义;

3 ) Mutations

        有的读者是前面篇目更过来的,mutations可能是单独的js文件引入的,也有的是初始化留下的文件在index.js中;写法并没有差异,仅需要在对应的mutations处编写即可:

// mutations.js 单独文件
export default {
    receive_SwiperList (state, data) {
      // data 即 获取数据的result.data.swiperList,赋值给state中的swiperList
      state.swiperList = data
    }
}

        该行为操作会被 Devtools (Vue的拓展工具) 所记录,现在来看一下是否会被记录? 

4 )State 

Mutations 对 state 中的状态数据进行的修改;

5 )Vue Components

数据更新之后回到 Vue Components ,来看一下视图是否发生了变化:

        到这一步关于Vuex 的同步操作就已经结束了,那么到此你对Vuex的同步是否有了更近一步的了解以及知识得以巩固呢?下面来讲Vuex中的异步操作;

Vuex —— 异步

        同样还是通过刚刚那张图来了解 Vuex 中的异步:

        从 Vue Components 中通过 dispatch 调用 actions 中的异步数据请求,然后不是将数据赋值修改到 state ,要保证操作行为在 Devtools 的监控范围,所以提交到 mutations 中,mutations 对state 中的数据状态进行修改,最终将结果反馈到 Vue Components ;


流程:Vue Components —— [ dispatch ] —— actions —— [ commit ] —— mutations —— state —— Vue Components


 1 ) Vue component —— [dispatch]

        同理,将上面完成的内容通过异步的方式来操作:

<template>
...
<button @click="getSwiperList">同步获取swiperList数据</button>
...
</template>
<script>
import { reqSwiperList } from '@/api'
export default {
  methods: {
    getSwiperList () {
      // 通过dispatch触发actions调用
      this.$store.dispatch('getSwiperList')
    }
  }
}

        通过this.$store.dispatch()来触发actions调用,在actions中进行异步请求数据:

2 )Actions —— [ commit ]

        在 /store/actions.js 或 在/store/index.js对应actions的节点编写 异步数据请求:

/* actions.js 间接修改 异步 */

export default {
  // 异步请求 —— 获取swiperList数据
  async getSwiperList (store) {
    const result = await reqSwiperList()
    console.log(result)
    if (result.meta.status === 200) {
      const data = result.data.swiperList
      store.commit('receive_SwiperList', data)
    }
  }
}

这个reqSwiperList 在上面已经解释过了,封装的接口数据请求函数;那么到 actions 之后,不能直接将数据赋值到 state ,而是通过提交到 Mutations ,通过 Mutations 来修改 state 数据的行为在 Devtools 的数据监控范围 ,所以要提交到 Mutations 去处理;

3 ) Mutations

        /store/mutations.js 的文件内容基本不变,将传递过来的数据在 Mutations 中赋值修改到 state中去即可;

/* 直接修改state数据状态 */
export default {
  receive_SwiperList (state, data) {
    state.swiperList = data
  }
}

4)State —— Vue Components

        最后这一个环节基本跟同步一致的了,所以就一块来看:

        可以看到异步请求也同样请求成功了,讲到这里Vuex的同步和异步就已经结束了,来简单的总结同步和异步,异步比同步操作多了一个actions流程,通过dispatch分发actions来进行异步数据请求操作!通过本篇对于同步和异步的操作能够对你有所帮助,感谢大家的支持!

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

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

相关文章

kaggle注册时出现一排“Captcha must be filled out.”

kaggle网址&#xff1a;Kaggle: Your Home for Data Science 想去kaggle下载一份数据&#xff0c;但是出现了一排红色的英文&#xff1a;&#xff08;真是学习之路哪哪都是阻碍哭唧唧&#xff09; ​ 出现该问题的原因&#xff1a;必须填写(图片)验证码&#xff0c;可是它没出…

长期不关路由器网速会变慢?一文读懂

如果把现代人最烦的十件事列一个清单&#xff0c;那么网速慢肯定其中一项。看剧的时候画面在转圈&#xff0c;玩游戏的时候角色在卡顿&#xff0c;真是让人非常恼火。 最近我家的网速也比刚安上网时慢了很多&#xff0c;看网上的说法是路由器太久没关了&#xff0c;应该天天关闭…

RESTful API是什么?

82. RESTful API是什么&#xff1f; 当我们构建应用程序或者开发Web服务时&#xff0c;常常需要提供一组接口供客户端访问和使用。RESTful API是一种常见的设计风格&#xff0c;它通过使用HTTP协议和一组规范的设计原则&#xff0c;提供了一种统一、可扩展和可维护的方式来构建…

2023金九银十Java基础-中级-高级面试题汇总(涵盖所有Java核心面试知识点)

寒冬来临&#xff0c;虽受眼前挫折&#xff0c;但咱程序猿&#xff08;媛&#xff09;也不能放弃啊&#xff01;也许这次秋招不是很理想&#xff0c;但是没得关系啊&#xff0c;再过几个月就开始备战2023年的金九银十了呀&#xff0c;现在着手准备&#xff0c;既是给自己的秋招…

机器学习评估与度量指标

这里的内容主要包括&#xff1a;性能度量、比较检验和偏差与方差。在上一篇文章中&#xff0c;我们解决了评估学习器泛化性能的方法&#xff0c;即用测试集的"测试误差"作为"泛化误差"的近似&#xff0c;当我们划分好训练/测试集后&#xff0c;那如何计算&…

《Opencv3编程入门》学习笔记—第十章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第十章 角点检测 一、Harris角点检测 &#xff08;一&#xff09;兴趣点与角点 1、图像特征类型&#xff1a; 边缘角点&#xff08;感兴趣点&#xff09;斑点&#xf…

在pycharm上导出Anaconda3的环境配置文件

目录 1.原理&#xff1a; ​2.亲身实践&#xff1a; 1.原理&#xff1a; 要在PyCharm中导出Anaconda3环境的配置文件&#xff0c;可以使用conda命令行工具来完成。请按照以下步骤进行操作&#xff1a; 打开PyCharm&#xff0c;并确保项目使用的是Anaconda3环境。 在PyCha…

【小程序】如何手动绘制分享用的图片

上一篇【小程序】如何实现滑动翻页中介绍了如何在小程序中实现上下滑动翻页的效果。 如果要给这个产品增加一个生成图片用于分享到朋友圈的功能&#xff0c;又该如何实现呢&#xff1f; 先来看一下最终的效果图&#xff1a; 首先&#xff0c;新建一个页面&#xff08;page&am…

vue+elementui实现英雄联盟道具城

目录 一、效果图 1.首页 2.商品列表、分类 二、实现重点讲解 1.首页轮播图 1.1技术实现&#xff1a; 1.2.鼠标聚焦切换图片事件 2.首页tab切换 3.商品列表实现 三、项目结构说明 四、总结 一、效果图 1.首页 项目与官方效果没有太大差异&#xff1a; 游戏导航&#xff1…

windows上VMware虚拟机彻底卸载详细教程

VMware虚拟机彻底卸载 一、彻底卸载过程1.1 停止VMware服务1.2 结束vmware任务1.3 开始卸载VMware1.4 删除注册表信息1.5 删除安装目录 二、vmware 安装教程三、vmware 使用教程 回到目录   回到末尾 一、彻底卸载过程 卸载之前&#xff0c;需要先关闭VMware相关的后台服务…

高速公路智慧稽核常用技术及发展方向浅析

交通运输部数据显示&#xff0c;截至2021年末&#xff0c;全国收费公路里程达18.76万公里&#xff0c;其中高速公路16.12万公里&#xff0c;占比高达85.9%&#xff0c;高速公路费用收缴的重要性尤为凸显。 收费系统作为高速公路的三大机电系统之一&#xff0c;在高速费用的收取…

【Java面试题】框架篇——Spring

文章目录 什么是Spring框架&#xff1f;Spring框架有哪些主要模块&#xff1f;Spring有几种配置方式&#xff1f;Spring框架中的单例Beans是线程安全的么&#xff1f;Spring 框架中都用到了哪些设计模式&#xff1f;★★★Spring AOP在实际项目中的应用★★★阐述一下Bean的生命…

使用 Transformers 为多语种语音识别任务微调 Whisper 模型

本文提供了一个使用 Hugging Face &#x1f917; Transformers 在任意多语种语音识别 (ASR) 数据集上微调 Whisper 的分步指南。同时&#xff0c;我们还深入解释了 Whisper 模型、Common Voice 数据集以及微调等理论知识&#xff0c;并提供了数据准备和微调的相关代码。如果你想…

django-vue-admin 运行记录

django-vue-admin 运行记录 1. 安装 ubuntu-20.04.6 桌面版 ubuntu-20.04.6-desktop-amd64.iso 桌面版本 桌面版的目的是 有浏览器可以看 django vue 的localhost网页。 用server版&#xff0c;需要用别的机器看&#xff0c;别的机器在权限上可能有问题。 sudo apt install …

ChatGLM2-6B-Int4本地部署

原文链接&#xff1a;http://wangguo.site/posts/9d8c1768.html ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本 GitHub地址&#xff1a;https://github.com/THUDM/ChatGLM2-6B 1、先看效果 2、本地部署 部署环境 wsl2-ubuntu22.04 LTS-----------------------…

计网简答题

答案不保证正确性&#xff0c;仅供参考。 1.有如图所示的以太网&#xff0c;每个交换机的名字及接口号、主机的名字及MAC地址都标明在图中。网络初启动时&#xff0c;两个交换机的转发表都为空&#xff0c;接着先后进行以下MAC帧传输&#xff1a;H1→H5&#xff0c;H3→H2&…

PG系列5:PG体系结构

文章目录 一. PG体系结构1.1 PG的体系结构概述1.2 PostgreSQL进程概述 二. PG内存结构三. PostgreSQL进程3.1 后台进程3.2 后端进程(backend)或服务器进程3.3 用户进程或客户端进程3.4 数据库服务器启动流程 四. PG逻辑结构4.1 PostgreSQL cluster4.2 database和cluster的关系4…

DevExpress WPF Scheduler组件,快速构建性能优异的调度管理器!(上)

无论您在WPF项目中是需要Outlook样式的调度程序&#xff0c;还是需要时间表或议程视图来向最终用户展示信息&#xff0c;DevExpress WPF Scheduler都提供了数十个选项&#xff0c;如集成的日程对话框等&#xff0c;因此用户可以快速构建下一个伟大的调度管理器。 DevExpress W…

抖音本地生活团购服务商

抖音本地生活团购服务商市场前景非常广阔。随着移动互联网的普及和人们对本地生活服务需求的增加&#xff0c;本地生活团购行业已成为一个快速增长的市场。而抖音平台拥有庞大的用户基础和强大的社交媒体传播力&#xff0c;为本地生活团购服务商提供了巨大的发展机遇。 抖音…

刷题日记《链表02》

题目描述 给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 解题思路 面对这种求和相加的题目&#xff0c;不知道…