深入理解vuex2.0 之 modules

深入理解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.js的移动组件库cube-ui

    浅谈基于Vue.js的移动组件库cube-ui 介绍 cube-ui是一个基于 Vue.js 的移动端组件库。它提供了很多常用的移动端 UI 组件,可以快速构建高质量的移动应用。cube-ui 在使用上都使用单文件组件,非常适合 Vue.js 开发者。它是由滴滴出行开源的。 安装 先使用npm安装vue-cli,再使用vue-cli构建项目 $ npm in…

    Vue 2023年5月28日
    00
  • 详解Vue使用命令行搭建单页面应用

    非常感谢您关注本网站,以下是对“详解Vue使用命令行搭建单页面应用”的完整攻略: 一、简介 Vue.js是一个流行的JavaScript框架,它使用MVVM模式来构建单页面应用程序。 而命令行是可以让我们方便地执行许多自动化任务的强大工具。接下来,我们将使用命令行来构建一个Vue.js单页面应用程序。 二、步骤 1. 安装Node.js和Vue.js 在开始…

    Vue 2023年5月28日
    00
  • vue 动态样式绑定 class/style的写法小结

    那我来详细讲解“Vue 动态样式绑定 class/style 的写法小结”。 1. 绑定 class Vue.js 提供了一种叫做:class的指令,可以通过数据绑定的方式动态地设置一个 HTML 元素的类名。语法为: <div :class="{ className: condition }"></div> 其中…

    Vue 2023年5月27日
    00
  • Vue页面骨架屏注入方法

    Vue页面骨架屏注入方法是一种性能优化的策略,可以让页面在加载数据的过程中显示出一个占位符,给用户提供更好的体验。下面是一个石乐志的攻略,包含具体的流程和示例说明。 步骤一:安装骨架屏插件 首先,你需要安装一个 Vue 骨架屏插件。我们推荐使用 vue-skeleton-webpack-plugin 或 page-skeleton-webpack-plugi…

    Vue 2023年5月28日
    00
  • Ant Design Vue日期组件的时间限制方式

    Ant Design Vue 是 Ant Design 在 Vue 中的实现,是一套基于 Vue 实现的高质量 UI 组件库,拥有丰富的组件和良好的设计风格,深受前端工程师的喜爱。 Ant Design Vue 提供了日期组件,我们可以通过设置时间限制方式来限定用户选择日期的范围,例如限制用户只能选择今天及今天之后的日期,或者只能选择本月份的日期等等。 下面…

    Vue 2023年5月29日
    00
  • vue加载天气组件使用方法详解

    Vue 加载天气组件使用方法详解 介绍 天气组件是一种在 Vue 应用程序中使用的开源组件,可以方便地向 Vue 应用中添加天气信息,并且使用简单。本文将介绍如何在 Vue 应用程序中使用天气组件。 安装 安装天气组件,可以通过 npm 包管理器来进行安装,命令如下: npm install vue-weather-widget –save 使用 在 Vu…

    Vue 2023年5月29日
    00
  • JS 图片压缩原理与实现方法详解

    JS 图片压缩原理与实现方法详解 原理介绍 图片压缩是指在保证图片质量的前提下,通过降低图片的分辨率、压缩比率等方式来减小图片的体积,从而达到优化页面加载速度的目的。在网页中,对于图片的大小不同,会直接影响页面的加载速度,特别是对于移动端的用户体验更加重要。 在实现 JavaScript 图片压缩的时候,常见的有两种方式: HTML5 的 Canvas + …

    Vue 2023年5月28日
    00
  • vue如何循环给对象赋值

    想要循环给对象赋值,可以使用Vue中的v-for指令来实现。v-for指令可以遍历一个数组或者一个对象中的所有元素,常用语渲染列表,也可以用于动态生成表单。 对于对象,v-for指令可以通过它的第二个参数,键名(key),来获取到对象的键名和键值。通过在模板中使用{ key, value } in object 表达式可以遍历对象。具体过程如下: 1.创建一…

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