深入理解vuex2.0 之 modules

yizhihongxing

深入理解vuex2.0 之 modules

在使用 Vuex 状态管理模式时,在项目逐渐庞大、复杂时,我们不可避免需要将 state、mutation、action 拆分成单独的模块,方便单独管理、解耦以及后期维护。这就需要使用 Vuex 的 modules 来进行管理。

使用 modules

我们可以将一个 store 分成多个模块,每个模块都有自己的 state、mutation、action、getter 等。为了演示方便,这里我们只取其中一个需要拆分的模块 - shoppingCart,该模块涉及到购物车商品的添加、删除等。

首先我们需要在 store 下新建一个 shoppingCart.js 文件,将 shoppingCart 的 state、mutation、action 都在这个文件下面管理。

shoppingCart.js

const shoppingCart = {
  state: {
    items: []
  },
  mutations: {
    addItem (state, payload) {
      state.items.push(payload)
    },
    removeItem (state, payload) {
      const index = state.items.indexOf(payload)
      state.items.splice(index, 1)
    }
  },
  actions: {
    addItem ({ commit }, payload) {
      setTimeout(() => {
        commit('addItem', payload)
      }, 1000)
    },
    removeItem ({ commit }, payload) {
      setTimeout(() => {
        commit('removeItem', payload)
      }, 1000)
    }
  },
  getters: {
    cartItemsCount (state) {
      return state.items.length
    }
  }
}

export default shoppingCart

这里我们将 shoppingCart 的 state 设置为一个 items 数组来保存购物车商品;mutation 设置为 addItem、removeItem 分别添加、删除 items 中的商品;action 设置相应的处理逻辑,我们已经将 addItem、removeItem 的操作放入 setTimeout 函数中,模拟异步请求的情况。

接下来在 store/index.js 中加载并使用该模块:

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import shoppingCart from './shoppingCart'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    shoppingCart
  }
})

我们在 modules 中加入 shoppingCart 模块,注意将其引入并注册到 Vue.use 的 Vuex 中。

在组件中使用 modules 中的 state、mutation、action

如果我们要在某个组件中使用 modules 中的数据,比如我们在 Home 组件中需要展示当前购物车里商品的数量,我们只需要如下书写即可:

<template>
  <div>
    <h2>Home</h2>
    <p>购物车里有 {{ cartItemsCount }} 个商品</p>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'

export default {
  computed: {
    ...mapGetters({
      cartItemsCount: 'shoppingCart/cartItemsCount'
    })
  }
}
</script>

这里我们使用 Vuex 提供的 mapGetters 工具函数,将 state 中的 cartItemsCount 映射到当前组件的 computed 属性上,对应的 getters 对象为 shoppingCart/cartItemsCount,其中 shoppingCart 为当前模块的名称。

在组件中使用 mapState 工具函数进行 state 的映射也类似:

import { mapState } from 'vuex'

export default {
  computed: {
    ...mapState({
      items: state => state.shoppingCart.items
    })
  }
}

以上是关于使用 Vuex modules 的简单演示,我们可以将各个模块分开管理来避免一个 store 过于臃肿。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解vuex2.0 之 modules - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue上传文件formData上传的解决全流程

    下面我来详细讲解“Vue上传文件formData上传的解决全流程”的完整攻略。本攻略将围绕如下四个方面展开: 介绍formData的基本概念 通过vue实现文件formData上传的步骤 以图片上传为例进行演示 以文件上传为例进行演示 1. formData的基本概念 form是HTML表单的一个本质,每个form控制一组WEB控件,这些控件包括输入框,按钮…

    Vue 2023年5月28日
    00
  • Springboot实现Java阿里短信发送代码实例

    Springboot实现Java阿里短信发送代码实例 简介 阿里云短信服务提供了短信发送、查询等功能,便于企业进行验证码、营销等短信业务。本文将以Springboot为基础,讲解如何使用Java SDK来实现阿里短信服务。 准备工作 在使用阿里短信服务之前,需要先进行以下准备工作: 在阿里云控制台中开通短信服务并获取Access Key ID和Access …

    Vue 2023年5月28日
    00
  • Vue2.5通过json文件读取数据的方法

    以下是Vue2.5通过JSON文件读取数据的完整攻略。 准备工作 首先,我们需要准备好一个存储数据的JSON文件。 比如,我们准备好了一个叫做data.json的文件,里面存储了如下数据: { "name": "Vue2.5", "version": "2.5.22", &quo…

    Vue 2023年5月28日
    00
  • vue中实现拖拽排序功能的详细教程

    为了详细讲解“Vue中实现拖拽排序功能的详细教程”,下面我将提供以下步骤: 步骤一:使用插件 Vue中实现拖拽排序功能,可以使用一些优秀的插件,例如vuedraggable和sortablejs,我们选择使用vuedraggable插件。 npm install vuedraggable –save 步骤二:加载插件并设置参数 在需要实现拖拽排序功能的组件…

    Vue 2023年5月27日
    00
  • vue 绑定对象,数组之数据无法动态渲染案例详解

    下面详细讲解“vue 绑定对象,数组之数据无法动态渲染案例详解”的攻略。 问题背景 在 Vue.js 中,我们通常会使用数据绑定来实现页面动态渲染。但是,在某些情况下,我们可能会遇到无法动态渲染的问题。例如,绑定的对象或数组中的数据被修改后,页面没有自动更新。这可能会导致用户体验不佳或功能无法正常使用。 原因分析 出现数据无法动态渲染的问题,通常有以下几种原…

    Vue 2023年5月28日
    00
  • mpvue构建小程序的方法(步骤+地址)

    mpvue是一款基于Vue.js框架的小程序前端开发框架,它可以实现在小程序中使用Vue.js的语法和开发方式,极大地提高了小程序的开发效率和代码质量。下面我将详细讲解如何使用mpvue构建小程序。 步骤 安装mpvue脚手架工具 npm install -g vue-cli vue init mpvue/mpvue-quickstart my-projec…

    Vue 2023年5月27日
    00
  • vue2.0开发入门笔记之.vue文件的生成和使用

    当我们使用 Vue.js 进行开发的时候,最普遍的方式就是通过 .vue 文件进行组件化开发。本次攻略将详细讲解 .vue 文件的生成和使用。 什么是 .vue 文件? .vue 文件是一种组件化的文件格式,Vue.js 是通过 .vue 文件进行组件开发。.vue 文件将一个组件的 HTML、CSS 和 JavaScript 内容放在同一个文件中,便于管理…

    Vue 2023年5月28日
    00
  • vue-cli中的:visible.sync是什么意思

    在Vue-cli中,:visible.sync 是一个指令,用于实现父组件与子组件之间的双向绑定。通过这个指令,可以实现在父组件中改变子组件的状态,并且子组件中的状态改变也能反映到父组件中。 下面是这个指令的应用示例: <!– 父组件 –> <template> <div> <child-component :v…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部