深入理解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日

相关文章

  • 利用vue3仿苹果系统侧边消息提示效果实例

    下面我就给您详细讲解利用vue3仿苹果系统侧边消息提示效果的完整攻略。 1. 概述 本文将介绍如何利用vue3实现仿苹果系统侧边消息提示效果。为了达到这个目的,我们将使用一些vue3的特性,如Teleport,Composition API等。 2. 准备工作 在正式开始实现之前,我们需要完成一些准备工作。 2.1 创建项目 首先,我们需要创建一个新的vue…

    Vue 2023年5月28日
    00
  • Vue 全家桶实现移动端酷狗音乐功能

    Vue 全家桶实现移动端酷狗音乐功能 一、技术栈概述 本文的前端技术栈包括: Vue.js:一个用于构建用户界面的渐进式框架。 Vuex:Vue.js 的状态管理模式及库。 Vue-Router:Vue.js 的路由管理器。 Axios:一个基于 Promise 的 HTTP 库,用于浏览器和 Node.js。 二、项目准备 安装Vue-cli Vue-cl…

    Vue 2023年5月28日
    00
  • vue3动态修改打包后的请求路径的操作代码

    要动态修改打包后的请求路径,需要通过修改Vue CLI中的webpack配置实现。下面是具体的步骤: 打开Vue项目所在目录,找到vue.config.js文件。如果该文件不存在则需要手动创建。 使用process.env.BASE_URL获取当前项目的基础路径,然后将该路径保存到变量中,这个变量可以在需要的地方被引用。 javascript const b…

    Vue 2023年5月28日
    00
  • 浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑

    下面是针对“浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑”的完整攻略。 标题 第一步:Hbuilder安装与使用 在Hbuilder官网中下载对应系统的Hbuilder软件 去Hbuilder的官方文档中找打包流程并根据官方文档进行打包操作 打包完成之后,在运行的手机或者模拟器上测试APP的效果,确保APP在打包过程中没有出现问题 第二步…

    Vue 2023年5月27日
    00
  • vue 多入口文件搭建 vue多页面搭建的实例讲解

    下面是详细讲解”vue 多入口文件搭建 vue多页面搭建的实例讲解”的攻略: 1. 前置条件 为了搭建 Vue 多入口文件,你需要确保以下工具 已经安装: Node.js:安装最新版本代码和 npm 包 Vue CLI:用于创建 Vue 应用程序的命令行工具 2. 创建 Vue 应用程序 使用 Vue CLI 创建一个新的 Vue 应用程序: vue cre…

    Vue 2023年5月28日
    00
  • 使用Vue.set()方法实现响应式修改数组数据步骤

    使用Vue.set()方法实现响应式修改数组数据,可以确保视图与数据的同步更新。下面是实现步骤: 引入Vue 在使用Vue.set()方法之前,需要先在项目中引入Vue.js。可以通过script标签引入,也可以通过webpack等构建工具引入。 定义数据 假设要在Vue组件中使用一个数组todos: data() { return { todos: [ {…

    Vue 2023年5月28日
    00
  • 详解VUE单页应用骨架屏方案

    标题:详解VUE单页应用骨架屏方案 什么是骨架屏 骨架屏即为页面骨架,通俗点来说就是一个页面还没加载完成时,所出现的一种页面展示方案。它将页面大致的结构和样式提前定义好,填充占位元素在视觉上证明了页面正在加载。而实际上用户看到的只是一个假象,等待页面正式加载完成后,占位元素会被替换成真实的内容。 骨架屏在VUE单页应用中的应用 在VUE单页应用中,页面通过异…

    Vue 2023年5月28日
    00
  • vue 动态创建组件的两种方法

    下面是关于“Vue 动态创建组件的两种方法”的完整攻略。 什么是动态创建组件 Vue 是组件化的一个框架,开发者可以将页面分割为不同的组件,然后方便组合和复用。在 Vue 中,我们可以使用普通方式来定义组件,也可以动态的创建组件。 动态创建组件指的是在 Vue 的运行时期,通过代码的方式来生成需要的组件,而不是在模板中直接放置组件。与静态创建的组件相比,动态…

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