@

辅助理解vuex的工作原理:好比一个客户(VueComponents)去饭店吃饭,客人首先和服务员(Actions)对接,然后服务员再将客户的需求讲述给厨房的厨师(Mutations)。存在一种情况、客户和厨师很熟、厨师也知道客户的口味。则可以直接跳过服务员直接对话。另外一种情况,服务员可以处理一些特殊的情况,比如客户点的菜一起吃可能会造成不良的影响,这个时候服务员的作用就出来了。也就是说Actions 可以处理一些业务逻辑,调用接口,发送ajax请求。

1.概念

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

2.何时使用?

多个组件需要共享数据时

3.搭建vuex环境

安装vuex:npm i vuex,要安装对应的版本

安装可能出现的问题:https://blog.csdn.net/weixin_43304253/article/details/126633354

3.1 创建文件:src/store/index.js

  1. //引入Vue核心库
  2. import Vue from 'vue'
  3. //引入Vuex
  4. import Vuex from 'vuex'
  5. //应用Vuex插件
  6. Vue.use(Vuex)
  7. //准备actions对象——响应组件中用户的动作
  8. const actions = {}
  9. //准备mutations对象——修改state中的数据
  10. const mutations = {}
  11. //准备state对象——保存具体的数据
  12. const state = {}
  13. //创建并暴露store
  14. export default new Vuex.Store({
  15. actions,
  16. mutations,
  17. state
  18. })
  19. //第二种形式
  20. // //创建store
  21. // const store = new Vuex.Store({
  22. // actions,
  23. // mutations,
  24. // state,
  25. // })
  26. // //导出store
  27. // export default store

3.2 在main.js中创建vm时传入store配置项

  1. //引入store
  2. import store from './store'
  3. //创建vm
  4. new Vue({
  5. el:'#app',
  6. render: h => h(App),
  7. store
  8. })

4.基本使用

4.1、初始化数据、配置actions、配置mutations,操作文件store.js

  1. //引入Vue核心库
  2. import Vue from 'vue'
  3. //引入Vuex
  4. import Vuex from 'vuex'
  5. //引用Vuex
  6. Vue.use(Vuex)
  7. const actions = {
  8. //响应组件中加的动作
  9. jia(context,value){
  10. // console.log('actions中的jia被调用了',miniStore,value)
  11. context.commit('JIA',value)
  12. },
  13. }
  14. const mutations = {
  15. //执行加
  16. JIA(state,value){
  17. // console.log('mutations中的JIA被调用了',state,value)
  18. state.sum += value
  19. }
  20. }
  21. //初始化数据
  22. const state = {
  23. sum:0
  24. }
  25. //创建并暴露store
  26. export default new Vuex.Store({
  27. actions,
  28. mutations,
  29. state,
  30. })

4.2、组件中读取vuex中的数据:$store.state.sum

4.3、 组件中修改vuex中的数据

$store.dispatch('action中的方法名',数据)$store.commit('mutations中的方法名',数据)

备注:若没有网络请求或其他业务逻辑,组件中也可以越过actions,即不写dispatch,直接编写commit


5、实际应用

描述:制作一个简单的数字累加器,加法、减法、定时加、累加和为奇数加

目的:练习使用vuex、了解期工作的原理

5.1 项目结构

5.2 store/index.js

  1. //该文件用于创建Vuex中最为核心的store
  2. //引入Vuex
  3. import Vuex from 'vuex'
  4. //引入Vue
  5. import Vue from 'vue'
  6. //使用插件
  7. Vue.use(Vuex)
  8. //准备action-- 用于响应组件中的动作
  9. const actions = {
  10. jia(context, value) {
  11. console.error("Action中的", context, value)
  12. context.commit('JIA', value)
  13. },
  14. jiaodd(context, value) {
  15. if (context.state.sum % 2) {
  16. console.error("jiaodd")
  17. context.commit('JIA', value)
  18. }
  19. },
  20. jiaWait(context, value) {
  21. setTimeout(() => {
  22. context.commit('JIA', value)
  23. }, 500);
  24. }
  25. }
  26. //准备mutations-- 用于操作数据(state)
  27. const mutations = {
  28. JIA(state, value) {
  29. console.error("Mutations中的", state, value)
  30. state.sum += value
  31. },
  32. JIAN(state, value) {
  33. state.sum -= value
  34. }
  35. }
  36. //准备state--用于存储数据
  37. const state = {
  38. sum: 0 //当前的和
  39. }
  40. //第一种形式
  41. //创建并且暴露store
  42. export default new Vuex.Store({
  43. actions,
  44. mutations,
  45. state,
  46. })
  47. //第二种形式
  48. // //创建store
  49. // const store = new Vuex.Store({
  50. // actions,
  51. // mutations,
  52. // state,
  53. // })
  54. // //导出store
  55. // export default store

5.3 components/Count.vue

  1. <template>
  2. <div>
  3. <h1>当前求和为:{{ $store.state.sum }}</h1>
  4. <select v-model.number="n">
  5. <option value="1">1</option>
  6. <option value="2">2</option>
  7. <option value="3">3</option>
  8. </select>
  9. <button @click="increment">+</button>
  10. <button @click="decrement">-</button>
  11. <button @click="incrementOdd">当前求和为奇数再加</button>
  12. <button @click="incrementWait">等一等再加</button>
  13. </div>
  14. </template>
  15. <script>
  16. export default {
  17. name: "Count",
  18. data() {
  19. return {
  20. n: 1, //用户选择的数字
  21. };
  22. },
  23. methods: {
  24. increment() {
  25. this.$store.dispatch("jia", this.n);
  26. },
  27. decrement() {
  28. this.$store.commit("JIAN", this.n);
  29. },
  30. incrementOdd() {
  31. this.$store.dispatch("jiaodd", this.n);
  32. },
  33. incrementWait() {
  34. this.$store.dispatch('jiaWait',this.n)
  35. },
  36. },
  37. };
  38. </script>
  39. <style lang="css">
  40. button {
  41. margin-left: 5px;
  42. }
  43. </style>

5.4 App.vue

  1. <template>
  2. <div>
  3. <Count/>
  4. </div>
  5. </template>
  6. <script>
  7. import Count from './components/Count'
  8. export default {
  9. name:'App',
  10. components:{Count},
  11. }
  12. </script>

5.6 main.js

  1. // The Vue build version to load with the `import` command
  2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
  3. import Vue from 'vue'
  4. import App from './App'
  5. import router from './router'
  6. //引入store
  7. import store from './store/index.js'
  8. Vue.config.productionTip = false
  9. /* eslint-disable no-new */
  10. new Vue({
  11. el: '#app',
  12. router,
  13. store,
  14. render: h => h(App),
  15. beforenCreate() {
  16. Vue.prototype.$bus = this
  17. }
  18. })

6、实战测试效果

6.1 视频效果

[video(video-hJjausRG-1662043616977)(type-csdn)(url-https://live.csdn.net/v/embed/236077)(image-https://video-community.csdnimg.cn/vod-84deb4/88cc32c2509c40ce8879a9fb074824dd/snapshots/f0779060781c49858d2222148b714ec5-00003.jpg?auth_key=4815643083-0-0-743d2b21cb5e7a8171735f62f6e37491)(title-vuex)]

6.2 原理图解(代码走向)

6.3 提示注意

  • 1、点击加号、纯粹的进行加操作,可以直接跳过dispatch,直接调用commit
  • 2、点击减号、和加法类似
  • 3、当累加和为奇数、可以继续添加。这个时候就要在Actions中进行逻辑判断、根据判断的结果在调用commit
  • 4、定时器也可以直接写在Actions

Vue学习之--------深入理解Vuex、原理详解、实战应用(2022/9/1)的更多相关文章

  1. Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)

    在上篇文章的基础上:Vue学习之--------深入理解Vuex之getters.mapState.mapGetters 1.在state中新增用户数组 2.新增Person.vue组件 提示:这里使 ...

  2. Vue学习之--------深入理解Vuex之模块化编码(2022/9/4)

    在以下文章的基础上 1.深入理解Vuex.原理详解.实战应用:https://blog.csdn.net/weixin_43304253/article/details/126651368 2.深入理 ...

  3. Vue学习之--------深入理解Vuex之getters、mapState、mapGetters(2022/9/3)

    这一篇博客的内容是在上一篇博客的基础上进行:深入理解Vuex.原理详解.实战应用 @ 目录 1.getters的使用 1.1 概念 1.2 用法 1.3 如何读取数据 2.getters在项目中的实际 ...

  4. Vuex原理详解

    一.Vuex是什么 Vuex是专门为Vuejs应用程序设计的状态管理工具.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生改变.它集中于MVC模式中的Model层 ...

  5. 举个例子去理解vuex(状态管理),通俗理解vuex原理,通过vue例子类比

    通俗理解vuex原理---通过vue例子类比   本文主要通过简单的理解来解释下vuex的基本流程,而这也是vuex难点之一. 首先我们先了解下vuex的作用vuex其实是集中的数据管理仓库,相当于数 ...

  6. Netty学习——服务器端代码和客户端代码 原理详解

    服务器端代码和客户端代码 原理详解:(用到的API) 0.Socket 连接服务器端的套接字 1.TcompactProtocol   协议层2.TFrameTransport   传输层3.THsh ...

  7. 【转】VLAN原理详解

    1.为什么需要VLAN 1.1 什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络.V ...

  8. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  9. Batchnorm原理详解

    Batchnorm原理详解 前言:Batchnorm是深度网络中经常用到的加速神经网络训练,加速收敛速度及稳定性的算法,可以说是目前深度网络必不可少的一部分. 本文旨在用通俗易懂的语言,对深度学习的常 ...

随机推荐

  1. 附加进程 到远程服务器中Docker容器内 调试

    很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常.通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程. VS中的附加进程非常强大 ...

  2. Python 车主之家全系车型(包含历史停售车型)配置参数爬虫

    本文仅供学习交流使用,如侵立删!demo下载见文末 车主之家全系车型(包含历史停售车型)配置参数爬虫 先上效果图 环境: win10 ,Contos7.4 python3.9.4 pycharm202 ...

  3. 彻底弄懂JS中的this

    首先,用一句话解释this,就是:指向执行当前函数的对象. 当前执行,理解一下,也就是说this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定.this到底指向谁?this的最终指向的 ...

  4. windows自动切换深色模式(夜晚模式)

    img { width: 30vw } windows系统上怎么根据日出日落时间判断切换为深色模式或浅色模式呢? windows系统自带了一个叫做"任务计划程序"的软件.可以通过& ...

  5. Excelize 2.4.0 正式版发布, 新增 152 项公式函数支持

    Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...

  6. tqdm和zip组合使用时无法显示进度条-解决办法

    问题 单独对于可迭代对象iterator使用tqdm时,结合循环就可以在终端显示进度条, 以直观展示程序进度,如下: from tqdm import tqdm textlist = [] for i ...

  7. 【AGC】使用云调试优惠扣费、华为设备上触发崩溃、无法下载华为应用市场问题小结

    ​ 1.使用云调试剩余优惠时长还剩300分钟,但还会扣费的情况. 问题描述:用户的云调试账户显示剩余优惠时长还有300分钟,但在使用云调试的过程中,还是产生了扣费的情况. ​ 解决方案: 当开发者成功 ...

  8. Linux有趣命令

    通外网 下载使用阿里云镜像源:wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.re ...

  9. KingbaseES R6 集群启动‘incorrect command permissions for the virtual ip’故障案例

    案例说明: KingbaseES R6集群启动时,出现"incorrect command permissions for the virtual ip"故障,本案例介绍了如何分析 ...

  10. Linux_ps总结

    ps命令用于监测进程的工作情况.进程是一直处于动态变化中,而ps命令所显示的进程工作状态时瞬间的 使用方式: ps [options] 常用参数 -A 显示所有进程 -a 显示现行终端机下的所有进程, ...