← 返回目录

第 5 卷

第 5 / 12 卷日期:

• 解决状态混乱问题:在大型应用中,若组件状态分散管理,会导致状态来源不明确、修改不可控、

数据不一致等问题,Vuex通过集中式管理,让状态变化可预测、可追溯;

• 提升开发效率:统一的状态管理规范,让团队协作更高效,新开发者可快速理解状态的流转逻辑,

无需关注组件间的通信细节;

• 增强应用可维护性:状态与组件解耦,当业务逻辑变更时,只需修改Vuex的Action/Mutation,无

需修改多个组件的逻辑,降低维护成本;

• 支持高级特性:内置支持状态持久化(配合插件)、模块化拆分、命名空间隔离等高级特性,满足

大型应用的复杂需求。

14. Vuex与localStorage在状态管理的不同用途和特性对比

Vuex和localStorage都可用于“存储数据”,但两者的设计初衷、特性和用途有本质区别,核心对比如下:

一、核心特性对比

对比维度VuexlocalStorage
存储类型内存存储(临时存储)本地存储(持久化存储,存储

在浏览器磁盘中)

响应式支持(基于Vue响应式系统,不支持(普通字符串存储,数
数据变化驱动视图更新)据变化不会触发视图更新)
存储格式支持JavaScript任意类型(对仅支持字符串类型(需通过
象、数组、函数等)JSON.stringify/JSON.

parse 转换对象/数组)

作用域仅当前应用会话(页面刷新/同源域名下共享(页面刷新/ 关闭后,数据丢失)关闭后,数据仍保留,除非手

动删除/过期)

修改方式统一通过Mutation直接通过
(Vuex2/3)/直接修改localStorage.setItem/
(Vuex4),可追踪localStorage.removeIt

em 修改,无统一管控

性能内存操作,读写速度极快磁盘IO操作,读写速度慢于 Vuex

二、不同用途

Vuex 的核心用途

  1. 应用全局状态的临时管理:存储应用运行时的共享状态(如用户登录状态、全局导航配置、购物车

临时数据、页面切换状态等);

  1. 组件间跨层级通信:解决跨组件、跨页面(路由切换)的状态共享问题,无需手动传递数据;
  2. 状态变更的统一管控:适用于需要追踪状态变化、有复杂异步逻辑(如接口请求后更新全局状态)

的场景;

  1. 临时状态存储:仅在应用运行期间有效,页面刷新后无需保留的数据(如临时筛选条件、弹窗显示

状态等)。

localStorage 的核心用途

  1. 状态持久化存储:存储需要跨会话保留的数据(如用户登录令牌(token)、用户偏好设置(主

题、语言)、本地缓存的列表数据等);

  1. 减轻服务器压力:缓存不常变化的静态数据(如城市列表、商品分类),避免每次页面加载都从服

务器请求;

  1. 本地数据备份:存储一些非核心数据,作为服务器数据的本地备份,提升应用离线可用性;
  2. 跨页面(同源)数据共享:在同源域名下的不同页面(非单页应用)之间共享数据(单页应用优先

使用Vuex)。

三、最佳实践

• 两者结合使用:Vuex负责运行时状态管理,localStorage负责状态持久化,例如:

  1. 用户登录后,将token存入localStorage(持久化),同时将用户信息存入Vuex(供组件快速访

问);

  1. 应用初始化时,从localStorage中读取token和用户信息,注入到Vuex中,恢复应用状态;

• 避免滥用:

  1. 不使用Vuex存储无需共享的组件私有状态(直接存在组件 data 中即可);
  2. 不使用localStorage存储敏感数据(如用户密码,易被XSS攻击窃取)和大容量数据(影响读写性

能);

  1. 不依赖localStorage实现响应式(需手动监听localStorage变化,再更新Vuex状态,驱动视图更

新)。

  1. 编译与渲染:template编译分解析-优化-生成三步,视图更新是异步的,依赖异步更新队列;
  2. 响应式核心:Vue2用Object.defineProperty(有缺陷),Vue3用Proxy(功能更强),依赖收集

仅在Effect执行时触发;

  1. 核心组件/API:keep-alive缓存组件实例,$nextTick获取更新后DOM,v-model是单向绑定+事件

监听的语法糖;

  1. 状态管理:Vuex是集中式单向数据流,localStorage是持久化存储,两者常结合使用,各司其职。
  2. Vuex状态管理与使用全局对象进行状态管理有什么本质区别和优势?

一、本质区别

  1. 状态响应式支持:
  2. Vuex:基于Vue原生响应式系统(Vue2:Object.defineProperty;Vue3:reactive)实现,状态

变化可自动驱动视图更新,无需手动处理DOM;

  1. 全局对象:普通JavaScript对象(如 window.globalState = {}),不具备响应式能力,状

态变化后需手动触发DOM更新,或额外封装响应式逻辑。

  1. 状态修改管控:
  2. Vuex:通过严格的“单向数据流”规范管控状态修改,仅能通过Mutation(Vue2/3)或统一API修

改,状态变更可追踪、可回溯;

  1. 全局对象:无任何修改限制,可在应用任意位置直接修改属性(如 globalState.user =

'new'),状态来源混乱,调试困难。

  1. 生态集成与工具支持:
  2. Vuex:深度集成Vue生态,支持Vue Devtools调试(查看状态历史、回溯操作),兼容Vue的生命

周期、组件通信等特性;

  1. 全局对象:与Vue生态无原生集成,调试需手动打印日志,无法关联组件渲染与状态变化的关系。
  2. 模块化与扩展性:
  3. Vuex:原生支持模块化(Module)拆分,支持命名空间隔离,可应对大型应用的复杂状态管理需

求;

  1. 全局对象:需手动拆分和维护模块(如 globalState.userModule、

globalState.cartModule),无原生隔离机制,易出现命名冲突和逻辑耦合。

二、Vuex的核心优势

全站分卷索引 · 12 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷
  11. 11第 11 卷
  12. 12第 12 卷