关于Vuex在不同场景下的优势与弊端-及解决方案

65 阅读2分钟

Vuex 是一个 Vue 的 状态管理工具,帮我们管理 Vue 通用的数据 (多组件共享的数据),下面我们分析几种使用场景,看看Vuex是怎么使用的.

  • 在同一个路由下,有多个组件,共用一个数据

组件关系简单,可以直接组件间传值解决,无需Vuex
组件数量多,关系不确定,直接无脑选Vuex
  • 在不同路由下,共用一个来自服务端的数据

1. 将数据放在每个组件内加载时获取:

优点:

  • 按需加载: 只有需要特定数据的组件才会请求数据,减少了不必要的网络请求。
  • 更好的性能: 减少了应用初始化时的数据请求量,加快了应用的加载速度。
  • 更好的控制: 每个组件都可以独立地管理数据的请求和更新,更容易实现组件的隔离和复用。

缺点:

  • 重复请求: 如果多个组件需要相同的数据,可能会导致重复请求,浪费网络资源。
  • 数据不一致: 不同组件可能在不同的时间点请求数据,导致数据的一致性难以维护。

2. 在一登录就获取并存储起来:

优点:

  • 数据一致性: 所有组件都使用同一份数据,保证了数据的一致性。
  • 性能优化: 减少了重复请求,提高了应用性能。
  • 全局状态: 方便实现全局状态管理,可以在任何组件中访问这些数据。

缺点:

  • 初始化时间较长: 如果全局数据较大,可能会延长应用的初始化时间。
  • 可能加载不必要的数据: 如果某个组件只在特定情况下才需要某些全局数据,提前加载可能会浪费资源。
根据应用场景和性能需求,可以选择合适的策略。
通常,对于小型应用或者数据量不大的情况,将数据存储在登录后的全局状态中是一个方便的选择。
如果使用Vuex来存储,需要注意刷新机制,避免存储对象为空~
对于大型应用或者需要优化性能的情况,按需加载数据可能是更合适的选择。

- 如果在一开始就使用Vuex存储数据,需要对数据做持久化,与localStorage结合是个不错的办法

// store.js
import Vuex from 'vuex';

const store = new Vuex.Store({
  state: {
    globalData: JSON.parse(localStorage.getItem('globalData')) || null,
  },
  mutations: {
    setGlobalData(state, data) {
      state.globalData = data;
      // 将数据保存到本地存储
      localStorage.setItem('globalData', JSON.stringify(data));
    },
  },
  actions: {
    fetchData({ commit }) {
      // 模拟从服务端获取数据
      const data = { /* 从服务端获取的数据 */ };
      commit('setGlobalData', data);
    },
  },
});

export default store;