【译】如何大大简化你的Vuex Store

简介: 随着Vue应用程序的大小增加,Vuex Store中的actions和mutations也会增加。本文,我们将介绍如何将其减少到易于管理的东西。

image.png


随着Vue应用程序的大小增加,Vuex Store中的actionsmutations也会增加。本文,我们将介绍如何将其减少到易于管理的东西。


Vuex是什么


Vuexvue.js应用程序的状态管理模式+库。它充当应用程序中所有组件的集中存储,其规则确保状态只能以可预测的方式进行变更。


我们怎么使用Vuex


我们正在使用VuexFactory Core Framework应用程序中的所有应用程序之间共享状态。由于框架是一组应用程序,(假设)我们目前有九个Vuex stores。每个store都有自己的state, actions和mutations。我们在store中使用actions来对后台进行API调用。数据返回后,我们使用mutations将其存储在state中。这允许任何组件访问该数据。可以想象到,我们的store可以有大量的actions来处理这些API调用。以下是我们其中一个Vuex stores中所有的actions操作示例。


image.png


这个store有16个actions。现在想象一下,如果我们有9个store,我们的Factory Core Framework总共有多少个actions


简化我们的Actions


我们所有的actions操作基本上都执行相同的功能。每个action都执行以下操作:


  • 从API获取数据(必要时包括有效负载)
  • state存储数据(可选)
  • 返回对调用该action组件的响应


要将这些重构为单个(统一)操作action,我们需要知道action需要明确的事情:


  • 要击中的端点(请求接口)
  • 在API调用中是否发送有效负载
  • 是否将数据提交到state中,如果是,则提交到哪个状态变量


我们当前的action


下面是我们其中的一个actions示范:


async getLineWorkOrders({ rootState, commit }, payload) {
    try {
        let response = await axios.post(
           'api.factory.com/getLineWorkOrders',
           Object.assign({}, payload.body, { language: rootState.authStore.currentLocale.locale }),
           rootState.config.serviceHeaders
        );
       commit( 'setCurrentWorkOrderNumber', response.data.currentWorkOrderNumber );
       return response.data;
    } catch (error) {
       throw error;
    }
},


在这个action中,我们通过击中端点(发起请求)api.factory.com/geteLineWorkOrders从我们的后台API获取数据。检索到数据之后,将更新state变量currentWorkOrder。最后,数据将返回到进行调用的组件中。我们所有的actions都有这种格式。要将它重构为单个操作,我们需要拥有端点,无论是否发送有效负载以及是否提交数据。下面👇是我们重构的单一action


async fetchData({ rootState, commit }, payload) {
   try {
       let body = { language: rootState.authStore.currentLocale.locale };
       if (payload) {
           body = Object.assign({}, payload.body, body);
       }
      let response = await axios.post(\`api.factory.com/${payload.url}\`, body, rootState.config.serviceHeaders );
      if (payload.commit) {
          commit('mutate', {
              property: payload.stateProperty,
              with: response.data\[payload.stateProperty\]
           });
      }
      return response.data;
   } catch (error) {
      throw error;
   }
}


此单个action将处理每种可能的调用。如果我们需要通过API调用发送数据,它可以做到。如果我们需要commit提交数据,它可以做到。如果它不需要提交数据,则不会。它始终将数据返回到组件。


使用统一的mutation


之前,对于需要改变状态mutate state的每个action,我们创建了一个新的mutation来处理这个问题。我们使用单一的mutation来处理这个问题。下面是我们的单一mutation


const mutations = {
    mutate(state, payload) {
       state\[payload.property\] = payload.with;
    }
};


如果一个action中需要在store中存储数据,我们如下调用mutation


commit('mutate', {
    property: <propertyNameHere>,
    with: <valueGoesHere>
});


总结


通过统一我们的actionmutation,我们大大简化了我们的store中的actionsmutations


译者加:其实就是为了更好的管理vuex,而形成模版方式的编写


相关文章
|
JavaScript 前端开发 API
轻松搞定Vue3+Pinia-4-多个store
轻松搞定Vue3+Pinia-4-多个store
419 0
|
6月前
|
前端开发 数据处理 开发者
vuex中mutations详解,与actions的区别
Vuex 的 Mutations 是用于改变 Vuex Store 中状态的一种方式。它是一个同步的操作,用于直接修改 Store 中的状态。
|
3月前
|
存储 JavaScript 前端开发
Redux 中 Store 的意义是什么?
【8月更文挑战第30天】
53 0
|
3月前
|
JavaScript
Vue学习之--------深入理解Vuex之getters、mapState、mapGetters(2022/9/3)
这篇文章深入探讨了Vuex中的getters概念和用法,以及如何通过mapState、mapGetters、mapActions和mapMutations四个辅助函数简化组件中的Vuex状态访问和操作,通过实际项目案例展示了这些概念的应用和效果。
|
6月前
|
JavaScript
如何在Vuex中定义和使用getters和actions
在Vuex中,`getters`用于派生状态值,类似Vue的计算属性,例如从`todos`状态中过滤已完成/未完成任务。`actions`则处理异步操作,如模拟加载数据,通过`commit`改变状态。
|
6月前
|
JavaScript 前端开发 测试技术
vuex中Actions详解
- Actions 是 Vuex 中的一个重要概念,用于处理异步操作和触发mutations。 - Actions 可以包含任意的 JavaScript 逻辑,包括异步操作(如发送 AJAX 请求)。 - Actions 通过调用 store.dispatch 方法来触发mutations。
|
6月前
|
JavaScript
Vue状态管理:什么是getters?Vuex中的getters有什么作用?
Vue状态管理:什么是getters?Vuex中的getters有什么作用?
199 3
|
6月前
|
JavaScript
vuex中的getters
vuex中的getters
32 0
|
6月前
|
存储 JavaScript 前端开发
vuex中的state
vuex中的state
51 0
|
存储 资源调度 JavaScript
Vue——14-vuex安装 State、Mutations以及Getters状态的的使用
vuex安装 State、Mutations以及Getters状态的的使用
116 0