@

辅助理解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. 《Python高手之路 第3版》这不是一本常规意义上Python的入门书!!

    <Python高手之路 第3版>|免费下载地址 作者简介  · · · · · · Julien Danjou 具有12年从业经验的自由软件黑客.拥有多个开源社区的不同身份:Debian开 ...

  2. 【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景

    GeoJSON ,一个用于存储地理信息的数据格式.GoeJSON对象可以表示几何.特征或特征集合,支持:点.线.面.多点.多线.多面和几何集合.在基于平面地图,三维地图中都需要用到的一种数据类型. 由 ...

  3. Codeforces Round #606(B-D)

    Dashboard - Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) - Codeforces ...

  4. Html飞机大战(四):状态的切换(界面加载类的编辑)

    好家伙,接着写   既然我们涉及到状态了,那么我们也会涉及到状态的切换   那么我们怎样切换状态呢? 想象一下,如果我玩的游戏暂停了,那么我们肯定是通过点击或者按下某个按键来让游戏继续   这里我们选 ...

  5. KingbaseES 的闪回查询

    KingbaseES V008R006C006B0013版本新增支持闪回查询,闪回版本查询.闪回表到指定时间点.旧版本已支持闪回回收站技术. 闪回技术(闪回查询和闪回表到指定时间点)可以通过时间戳和C ...

  6. KingbaseES V8R6集群维护之--修改数据库服务端口案例

    ​ 案例说明: 对于KingbaseES数据库单实例环境,只需要修改kingbase.conf文件的'port'参数即可,但是对于KingbaseES V8R6集群中涉及到多个配置文件的修改,并且在应 ...

  7. docker-compose部署elastiflow

    docker-compose导入导出命令 涉及的命令有export.import.save.load save 命令 docker save [options] images [images...] ...

  8. VSCODE 配置远程调试环境

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16691460.html 我的需求是,在Windows桌面 ...

  9. selenium爬取图片

    一.https/http开头的图片 1.我们以百度为例,下载百度图片到本地. 2.定位到该元素的img标签 from selenium import webdriver from selenium.w ...

  10. AOP实现系统告警

    工作群里的消息怕过于安静,又怕过于频繁 一.业务背景 在开发的过程中会遇到各种各样的开发问题,服务器宕机.网络抖动.代码本身的bug等等.针对代码的bug,我们可以提前预支,通过发送告警信息来警示我们 ...