vue保姆级教程----深入了解Vuex的工作原理

📢 鸿蒙专栏:想学鸿蒙的,冲

📢 C语言专栏:想学C语言的,冲

📢 VUE专栏:想学VUE的,冲这里

📢 CSS专栏:想学CSS的,冲这里

📢 Krpano专栏:想学VUE的,冲这里

🔔 上述专栏,都在不定期持续更新中!!!!!!!!!!!!!

目录

✨ 前言

Vuex的几个核心概念

Vuex工作原理

✨ 结语


✨ 前言

        Vuex是一个专门为Vue.js设计的状态管理模式。它采用集中式存储管理应用程序的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

        下面我们来对它的核心概念与工作原理进行详细分解:

Vuex的几个核心概念

  • State:储存应用状态的数据源,是一个树形结构,只有通过mutation函数才能改变其状态。
  • Getters: 对State的计算属性,类似Vue中的computed。
  • Mutations: 改变State的唯一途径, mutation必须是同步函数。
  • Actions: 用于提交Mutation来改变State,可以包含异步操作。
  • Modules: 将State、Getters、Mutations和Actions分割到不同的module中以保持项目的结构化。

State

        State是Vuex中的状态中心,存储着所有组件状态的数据。它是一个树形结构,只能通过mutation改变状态。

        State提供了一个应用的“单一数据源”,所有共享状态都定义在这里, components只需要引入使用不需要担心状态不同步的问题。

// store.jsexport default new Vuex.Store({state: {count: 0}  
})// Component.vueimport { mapState } from 'vuex'export default {computed: mapState({count: state => state.count})
}

Getters

        Getters相当于store的计算属性,对State进行加工处理形成易于使用的新数据。

        Getters接收state作为第一个参数,供其内部消费和处理,通过返回值暴露给外部。可以用来简化数据处理和实现缓存。

// store.jsexport default new Vuex.Store({getters: {doubleCount: state => state.count * 2 }
})// Component.vueimport { mapGetters } from 'vuex'export default {computed: mapGetters(['doubleCount' ])
}

Mutations

        Mutations是改变State的唯一途径。

        它接受state作为第一个参数,payload作为第二个参数。可以包含多个mutation函数,通过type区分不同的mutation。

        必须是同步函数,通过提交mutation而非直接改变state来保证状态改变可追踪和调试。

// store.jsexport default new Vuex.Store({mutations: {increment (state) {state.count++}}  
})// Component.vue methods: {increment() {this.$store.commit('increment') }
}

 Actions

        Actions用于处理业务逻辑,支持异步操作。

        通过context.commit提交mutation来触发状态改变,而非直接改变state。

        可以包含异步操作如 AJAX请求,可以用async/await简化异步流程。

// store.jsexport default new Vuex.Store({actions: {incrementAsync({ commit }) {setTimeout(() => {commit('increment')}, 1000) }}
})// Component.vuemethods: {incrementAsync() {this.$store.dispatch('incrementAsync')}
}

Modules

        Modules用于将状态、getters、actions、mutations分割到不同模块中。

        每个模块都有自己的state、getters、actions、mutations,不同模块的状态独立维护。

        有助于项目结构化,减少命名冲突。

// store.jsconst moduleA = {state: { ... },mutations: { ... },actions: { ... },getters: { ... }
}const moduleB = {state: { ... },mutations: { ... },actions: { ... }
}const store = new Vuex.Store({modules: {a: moduleA,b: moduleB}
})

        这样Vuex的每个部分如何协同工作会更加明确,希望对你进一步理解Vuex有帮助!可以根据这个框架来深入去实践和应用Vuex。

Vuex工作原理

  1. Vue组件通过dispatch方法触发Actions。
    // Component.vue
    methods: {increment() {this.$store.dispatch('increment') }
    }
  2. Actions 通过commit方法提交Mutations。
    // store.js
    actions: {increment({ commit }) {commit('INCREMENT')}
    }
  3. Mutations改变State中的数据。
    mutations: {INCREMENT(state) {state.count++}  
    }
  4. State数据的变化将触发所有依赖于它的组件的重新渲染。
    // Component.vue
    computed: {count() {return this.$store.state.count}
    }
  5. 可选步骤:组件可以通过getters从Store中获取特定的数据。
    // Component.vue 
    import { mapGetters } from 'vuex'computed: {...mapGetters(['doubleCount'])
    }

为何要分离 Mutation 和 Action

  • Action 可以包含异步操作,Mutation 只能是同步。
  • 将状态改变隔离到 Mutation 中,便于追踪和调试。
  • 分离业务逻辑 (Action)与状态变更 (Mutation) 使代码结构更清晰。

为何 Mutation 必须是同步

  • 直接在 Action 中改状态,不能明确追踪状态变化。
  • 很难追踪多个组件共享的状态变更。
  • 调试工具无法捕捉每个状态变更,失败记录前后快照。
  • 如果是异步操作,后续的改变可能基于之前的过时状态。

所以 Vuex 通过这种设计保证可追踪和可预测的状态管理,也使代码更结构化。这就是它的核心工作原理。

✨ 结语

        Vuex通过集中化的状态管理,将组件的共享状态抽离出来,以一个全局单例模式管理。这使得状态变化可预测,避免了复杂的组件间通信,也使调试和维护变得简单。

        其核心概念State、Getters、Mutations和Actions各司其职,但又相互配合,共同定义了一个清晰流程来改变和处理状态。这种模式提高了代码的结构化,也给予开发者更强的控制力。

        深入理解Vuex的设计思想,可以让我们更好地运用它管理复杂应用的状态,构建健壮可维护的Vue应用程序。Vuex是一个值得深入学习和应用的重要框架和思想。

        我们改日再会        

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

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

相关文章

Gen-AI 的知识图和分析(无需图数据库)

如今,图表比以往任何时候都更加相关和有用。由于目前正在发生的人工智能革命,工程师们正在考虑围绕 Gen-AI 的机会,利用具有动态提示、数据基础和屏蔽功能的开放 Gen-AI 解决方案,这进一步促使他们思考知识图谱等有效的解决方案。…

Ansible自动化运维(一)简介及部署、清单

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

Vue2 - Vue.observable 介绍

目录 1,介绍2,使用场景和 Vue 实例的区别 1,介绍 官网参考 可以让一个对象变成响应式数据。在 Vue 内部就是用它来处理传递给 Vue 的 data 对象,或是在单文件组件中 data() 返回的对象。 var vm new Vue({data: {count: 0} })…

MySQL数据库学习二

2 MySQL InnoDB 锁的基本类型 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html 官网把锁分成了 8 类。所以我们把前面的两个行级别的锁(Shared and ExclusiveLocks),和两个表级别的锁(Intention Locks)…

游泳耳机到底怎么选?一文说全游泳耳机哪个好!

对于一个热爱游泳的人,每次游泳都希望找到一种好的方式来打发时间,同时也希望能够得到一些锻炼。在尝试了各种游泳装备之后,发现游泳耳机是一个非常不错的选择,不过市面上的游泳耳机鱼龙混杂,所以游泳耳机的选择需要综…

深度学习|2.11 向量化vectorization

2.11 向量化的作用 向量化可以使得向量中的每一个维度的数据进行并行计算,从而加快了神经网络的计算速度。 验证 其他

超市订单管理系统

比较简单的超市订单管理系统

4.28 构建onnx结构模型-Unfold

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Unfold 结点进行分析 方式 方法…

电子书推荐|VMware 替代与升级攻略:技术路线、产品对比与用户实践

在进行 VMware 国产化替代时,您是否会遇到以下问题: 如何实现 VMware 整体架构/部分组件替换?是否可以不仅“为替换而替换”,而是同时实现架构的升级,带来更多业务价值?哪些国产方案具备 VMware 同等能力&…

vue3+ts+vite自定义组件上传npm流程

1. 创建项目 npm create vite 这里踩坑点: 运行vite生成的vue项目时报错“SyntaxError: Unexpected token ?? at “ 是因为node版本过低 电脑为windows11系统,我当时使用的版本node版本是14.21.3,如下图,后边安装了nvm版本…

PyTorch中常用的工具(3)TensorBoard

文章目录 前言3 可视化工具3.1 TensorBoard 前言 在训练神经网络的过程中需要用到很多的工具,最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块,合理使用这些工具可以极大地提高编程效率。 由于内容较多&#xff0c…

【解决】电脑上的WIFI图标不见了咋整?

相信不少同学都遇到过这种情况:电脑上的wifi图标莫名不见了,甚至有时候还是在使用的中途突然断网消失的。 遇到这种情况一般有两种解决方案: 1. 在开机状态下长按电源键30秒以上 这种办法应该是给主板放电,一般应用在wifi6上面。…

计算机视觉与自然语言处理(Open AI)

1.语音识别技术 语音识别是将语音转换为文本的技术, 是自然语言处理的一个分支。通过特征的提取、模式的匹配将语音信号变为文本或命令,以实现机器识别和理解语音。 按照应用场景的不同,可以大致分为三类; • 电信级系统应用&…

树莓派(linux)使用Motion动作捕捉或实时获取视频

测试摄像头 查看系统是否识别了摄像头 $ lsusb 测试摄像头抓图(拍照) 安装 fswebcam sudo apt-get install fswebcam 抓拍一张图,存放与当前目录,并保存为 jpg 格式。 fswebcam /dev/video0 ./img1.jpg 查看摄像头效果 安装 luvcview …

Web前端第9章思维导图

本章内容是关于CSS样式属性,包含CSS单位、CSS字体样式、CSS文本样式、CSS颜色与背景、CSS列表样式、CSS盒模型。重点在于CSS盒模型、CSS文本样式、CSS字体样式。 1. CSS单位 绝对单位 磅(pt),pica(pc)、c…

自动医疗检查仓:未来医疗的新篇章

自动医疗检查仓:未来医疗的新篇章 随着科技的飞速发展,医疗行业正经历着前所未有的变革。其中,自动医疗检查仓作为近年来备受瞩目的创新技术,正在逐渐改变我们对医疗服务的认知和体验。本文将对自动医疗检查仓进行深入剖析,从其技术原理、应用场景到未来发展趋势等方面展…

深度学习核心技术与实践之自然语言处理篇

非书中全部内容,只是写了些自认为有收获的部分。 自然语言处理简介 NLP的难点 (1)语言有很多复杂的情况,比如歧义、省略、指代、重复、更正、倒序、反语等 (2)歧义至少有如下几种: …

十大排序总结之——冒泡排序、插入排序

同样,这两几乎也是被淘汰了的算法,尽管它们是稳定的,但是时间复杂度没人喜欢,了解一下就好,没啥好说的,注意最后一句话就行了 一,冒泡排序 1. 算法步骤 共n-1趟,谁两敢冒泡就换了…

十四:爬虫-Redis基础

1、背景 随着互联网大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。 2、redis是什么 Redis 全称 Remote Dictio…

HarmonyOS4.0系统性深入开发10卡片事件能力说明

卡片事件能力说明 ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互,当前支持router、message和call三种类型的事件,仅在卡片中可以调用。 接口定义:postCardAction(component: Object, action: Object): void 接口…