Skip to content
On this page

Vuex

Vuex的状态管理原理是通过维护一个全局的共享状态(state),并对这个状态进行修改、获取等一系列操作。整个应用只需维护一个store实例作为状态管理容器,将多个组件中的需要共享的数据存储在store中,在组件中可以通过计算属性或方法获取这些数据。

Vuex的状态管理原理主要分为四个核心概念,分别是state、mutations、actions和getters。

  1. State:状态存储。Vuex使用单一状态树(single state tree)来管理应用级别的所有状态,在一个对象中包含了全部的应用层级状态。整个应用只需维护一个store实例,其中包含了应用所有的共享状态。

  2. Mutations:状态修改。Vuex规定状态只能通过提交mutation来进行修改,每个mutation都具有一个字符串的事件类型(type),和一个回调函数(handler)。在mutation的回调函数中,我们可以修改state中的数据。

  3. Actions:异步操作。Vuex的actions类似于mutation,同样包含一个事件类型和回调函数。但在action回调中,我们可以执行异步操作和复杂逻辑处理,并提交mutation以达到修改state的目的。

  4. Getters:状态计算。Vuex的getter可以看作是state的计算属性,用于监听state中的变化并缓存计算结果。可以理解为对state的进一步分析和处理,方便组件直接获取需要的数据。

当一个组件修改store中的状态时,只能通过提交mutation来进行,mutation包含了一个事件类型和回调函数,回调函数用于修改state中的数据。由于Vue的数据响应式原理,当state中的数据发生变化后,所有基于该数据渲染的地方都会自动更新。

当需要触发一个副作用操作时,比如异步操作或复杂计算逻辑,我们可以将这个操作封装到action中,并通过提交mutation来修改state中的状态。同时,getter是用于监听state中的变化并缓存计算结果,其本质上是一翻译的计算属性。

面试题

vuex的数据在刷新页面后会丢失,怎么解决这个问题?

在 Vue.js 应用中,Vuex 的数据在刷新页面后会丢失是因为数据是保存在内存中,而刷新页面会导致整个应用的重新加载,包括 Vue 实例和 Vuex 状态。可以使用以下几种方式来解决该问题:

  1. 使用缓存

将 Vuex 的数据保存在浏览器的本地存储(localStorage 或 sessionStorage)中。这样,在页面刷新后,可以从本地存储中读取数据并重新初始化 Vuex 的状态。要注意的是,本地存储是有容量限制的,所以请谨慎存储大量数据,以免影响性能和用户体验。

  1. 使用插件

可以使用特定的插件来帮助在刷新页面后保持 Vuex 的状态。例如,可以使用vuex-persistedstate插件,它可以将 Vuex 状态自动保存在本地存储中,并在页面加载时重新恢复状态。

  1. 后端存储

可以将 Vuex 的数据保存在服务器上,而不是本地存储。这样,刷新页面后,可以从服务器获取数据并初始化 Vuex。