当前位置: 首页 > news >正文

【Vue2 ✨】Vue2 入门之旅 · 进阶篇(八):Vuex 内部机制

在前几篇文章中,我们了解了 Vue Router 的原理与功能。本篇将深入探讨 Vuex 的内部机制,帮助你更好地理解 Vuex 如何管理应用的全局状态。


目录

  1. 什么是 Vuex
  2. Vuex 的核心概念
  3. Vuex 的工作原理
  4. Vuex 的状态流
  5. Vuex 的模块化管理
  6. 小结

什么是 Vuex

Vuex 是 Vue.js 官方提供的状态管理库,用于在 Vue 应用中集中管理 所有组件的状态。它使得我们可以通过一个全局的状态管理机制,方便地进行组件间的数据共享和更新。

Vuex 适用场景:

  • 在多个组件之间共享状态。
  • 管理复杂的组件数据流。
  • 在大型单页应用中管理全局状态。

Vuex 的核心概念

Vuex 的核心思想是 单一数据源,即应用的所有状态都存储在一个 store 中。它提供了几个主要概念:

  1. State:应用的状态,存储所有的数据。
  2. Getters:对 state 的计算和派生数据,类似于组件中的计算属性
  3. Mutations:用于修改 state 的唯一方式,且必须是同步的。
  4. Actions:用于提交 mutations 的方法,支持异步操作。
  5. Modules:当应用状态变得复杂时,可以将 store 分割成多个模块,每个模块有自己的 statemutationsactionsgetters

在这里插入图片描述


Vuex 的工作原理

Vuex 的工作原理是基于 状态集中式管理,它通过以下机制将状态管理与 Vue 组件的视图绑定:

1. State(状态)

所有的状态数据都会存储在 Vuex 的 state 中,所有组件都可以访问这个单一的状态树。

const store = new Vuex.Store({state: {count: 0}
})

2. Getters(派生状态)

Getters 是 Vuex 中用于从 state 计算和派生数据的方式。它们类似于 Vue 的计算属性,并且是 缓存 的,只有依赖的 state 改变时才会重新计算

const store = new Vuex.Store({state: {count: 0},getters: {doubleCount(state) {return state.count * 2}}
})

3. Mutations(同步修改状态)

Mutations 是唯一能改变 Vuex 状态的方式。它们必须是 同步 的,并且通过提交(commit)来触发。

const store = new Vuex.Store({state: {count: 0},mutations: {increment(state) {state.count++}}
})

触发 mutation:


store.commit('increment')

4. Actions(异步操作)

Actions 用于处理 异步操作,并在异步操作完成后提交 mutations 来改变 state。与 mutations 不同,actions 可以包含异步操作。

const store = new Vuex.Store({actions: {incrementAsync({ commit }) {setTimeout(() => {commit('increment')}, 1000)}}
})

触发 action:

store.dispatch('incrementAsync')

Vuex 的状态流

Vuex 的状态流是单向的,从而确保数据流动的清晰与可预测。Vuex 的状态流包括:

  1. 组件通过 mapState this.$store.state 访问状态,读取状态数据。
  2. 组件通过 commit 提交 mutations,修改 state 中的状态。
  3. 组件通过 dispatch 调用 actions,进行异步操作,并最终通过 mutations 修改 state。
  4. 组件通过 mapGetters this.$store.getters 访问 getters,获取计算得到的数据。

Vuex 强制将数据流动和修改分开,遵循以下原则:

  • state 只应通过 mutations 修改。
  • actions 可以进行异步操作,最终通过 mutations 来修改 state
  • getters 用于派生数据,不直接修改 state

Vuex 的模块化管理

随着应用规模的增大,Vuex 的状态管理会变得越来越复杂。这时,Vuex 提供了 模块化 的方案,让我们能够将 store 分成多个模块,每个模块有自己的 state、mutations、actions 和 getters。

模块化的配置:

const store = new Vuex.Store({modules: {moduleA: {state: {count: 0},mutations: {increment(state) {state.count++}},actions: {incrementAsync({ commit }) {setTimeout(() => {commit('increment')}, 1000)}}}}
})

通过模块化的方式,Vuex 可以使得状态管理更加清晰和可维护。


小结

  1. Vuex 提供了集中式的状态管理,使得多组件间的状态共享更加简单。
  2. 核心概念:state(状态)、getters(派生状态)、mutations(同步修改)、actions(异步操作)。
  3. Vuex 的状态流 是单向的,确保了数据流动的清晰与可预测。
  4. 通过 模块化管理,Vuex 可以适应大型应用的需求,使得状态管理更加灵活和可维护。
    在这里插入图片描述

📗 下一篇进阶文章,我们将学习 Vue2 性能优化,了解如何优化 Vue 应用的性能,提升用户体验。


文章转载自:

http://fFBpXRE4.dxpqd.cn
http://KmMlJ3gy.dxpqd.cn
http://tAnuYPAl.dxpqd.cn
http://b05aVbpm.dxpqd.cn
http://UxIcQgM5.dxpqd.cn
http://2EXrnCiS.dxpqd.cn
http://S07i3m95.dxpqd.cn
http://tQi10pUR.dxpqd.cn
http://6BLPQ5RQ.dxpqd.cn
http://e0chBwTn.dxpqd.cn
http://2uyO9RDy.dxpqd.cn
http://x5ufhkCK.dxpqd.cn
http://2avdAyLN.dxpqd.cn
http://l3Qj9EFS.dxpqd.cn
http://hbfK5ka8.dxpqd.cn
http://e59s7LVy.dxpqd.cn
http://bxLiZ22B.dxpqd.cn
http://ev7mdexW.dxpqd.cn
http://1YbOHlVm.dxpqd.cn
http://MU1gvC07.dxpqd.cn
http://kxl7uCR2.dxpqd.cn
http://OpPfMKQz.dxpqd.cn
http://w1FiRfYK.dxpqd.cn
http://xPeXKqMZ.dxpqd.cn
http://w7tXCb5s.dxpqd.cn
http://uWf2IKcF.dxpqd.cn
http://OUnflVyW.dxpqd.cn
http://ZLhbc1nl.dxpqd.cn
http://sW8sM1mY.dxpqd.cn
http://SUG4j5mX.dxpqd.cn
http://www.dtcms.com/a/381017.html

相关文章:

  • 【LeetCode】33. 搜索旋转排序数组
  • 【代码随想录day 25】 力扣 46. 全排列
  • Java JUC并发集合详解:线程安全容器完全指南
  • 流畅的Python(二) 丰富的序列
  • DPO vs PPO,偏好优化的两条技术路径
  • clickhouse的UInt64类型(countIf() 函数返回)
  • 算法之线性基
  • GlobalBuildingAtlas 建筑物白模数据下载
  • 用pywin32连接autocad 写一个利用遗传算法从选择的闭合图形内进行最优利用率的排版 ai草稿
  • 性能测试工具JvisualVM/jconsole使用
  • 面试题:Redis要点总结(性能和使用)
  • 无卡发薪系统:灵活用工全链条协同的核心枢纽( “数据互通、流程联动” 为核心,将人力招聘、劳务结算、电子合同签约、保险投保深度整合,构建灵活用工管理闭环。)
  • 万物皆可PID:深入理解控制算法在OpenBMC风扇调速中的应用
  • Centos修改主机明后oracle的修改
  • 使用 nanoVLM 训练一个 VLM
  • 2025年- H135-Lc209. 长度最小的子数组(字符串)--Java版
  • 数据库建表练习
  • 使用tree命令导出文件夹/文件的目录树(linux)
  • 【SQL】指定日期的产品价格
  • 在WPF项目中使用阿里图标库iconfont
  • 新能源知识库(91)《新型储能规模化行动方案》精华摘引
  • 51c自动驾驶~合集29
  • Arbess V2.0.7版本发布,支持Docker/主机蓝绿部署任务,支持Gradle构建、Agent运行策略
  • 中科米堆CASAIM自动化三维检测系统-支持批量测量工件三维尺寸
  • 【学习K230-例程19】GT6700-TCP-Client
  • Java链表
  • 【PostgreSQL内核学习:表达式】
  • 步骤流程中日志记录方案(类aop)
  • React.memo 小练习题 + 参考答案
  • Java 的即时编译器(JIT)优化编译探测技术