module

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter。

store.js

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const moduleA = {state: {countA: 0},getters: {totalA: (state) => (symbol) => {return (symbol || '$') + state.countA}},mutations: {incrementA(state, payload){state.countA += (payload || 1);}}
}const moduleB = {state: {countB: 0},getters: {totalB: (state) => (symbol) => {return (symbol || '$') + state.count}},mutations: {incrementB(state, payload){state.countB += (payload || 1);}}
}
const store = new Vuex.Store({modules: {moduleA,moduleB}
})export default store

component

<input type="button" value="increment" @click="add()"/>
<span>{{countA}}</span>
<script>import {mapState, mapMutations, mapActions} from 'vuex';export default {methods: {...mapMutations(['incrementA']),...mapMutations({add: 'incrementA'})},computed: {...mapState({countA: state => state.moduleA.countA})}}
</script>

小结

  • 每个模块中的 state、mutation、action、getter 都是独立的作用域
  • 不同模块间的 state、getter 的属性存在同级同名的情况下会报错
  • mutation、action 等方法同名的话会所有模块一起触
  • 解决以上问题,需要给每个模块再做一层作用域分离——命名空间

命名空间

store.js

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const moduleA = {namespaced: true,state: {count: 0},getters: {total: (state) => (symbol) => {return (symbol || '$') + state.count}},mutations: {increment(state, payload){state.count += (payload || 1);}}
}const moduleB = {namespaced: true,state: {count: 0},getters: {total: (state) => (symbol) => {return (symbol || '$') + state.count}},mutations: {increment(state, payload){state.count += (payload || 1);}}
}
const store = new Vuex.Store({modules: {moduleA,moduleB}
})export default store

带命名空间的绑定函数

methods: {...mapMutations(['moduleA/increment']),...mapMutations({add: 'moduleA/increment'})
},
computed: {...mapState({countA: state => state.moduleA.count})
}

Vue 教程第十七 篇—— Vuex 之 module相关推荐

  1. SpringBoot非官方教程 | 第十七篇:上传文件

    转载请标明出处:  http://blog.csdn.net/forezp/article/details/71023752  本文出自方志朋的博客 这篇文章主要介绍,如何在springboot工程作 ...

  2. Vue 教程第四篇—— Vue 实例化时基本属性

    实例元素 el 实例元素指的是 Vue 实例化时编译的容器元素,或者说是 Vue 作用的元素容器 <div id="app"></div> var vm = ...

  3. Vue 教程第十一篇—— vue-cli

    vue-cli 基于 webpack 构建工具下的一个 vue 的脚手架.关于脚手架,个人建议尽量用最简单的,然后在这个基础上按需求构建自己的项目. 这里会用到一个简单的脚手加,里面只有最简单的运行组 ...

  4. vue教程——13 Vuex

    vue教程--13 Vuex 一 什么是Vuex? 二 vuex核心组成模块 三 vuex初体验 四 getter用法----------怎么获取state中的值呢?(B组件怎么获取并监听state的 ...

  5. 九宫怎么排列和使用_剪映零基础入门教程第三十七篇:一学就会系列之九宫格小程序配音...

    很多玩儿抖音的朋友都看过九宫格视频,但是并不是每个玩抖音的人都会制作这个九宫格视频,实际这个需要借助小工具来帮忙,而常用抖音的朋友们会对剪映更加熟悉一些,且九宫格视频在剪映内的制作方式则比较简单.那么 ...

  6. Vue教程5【vuex】getters,mapState,mapGetters,mapActions,mapMutations,模块化namespace

    vuex 什么时候需要使用? 状态(数据)共享! vuex工作原理 搭建vuex环境 创建文件 src/store/index.js//全局安装[--save生产环境] npm install -g ...

  7. Vue教程 第一篇 基础

    从接触学习到项目应用,大大小小的vue项目也做了好几个,近期应公司要求需要培训下vue,于是便开始写vue教程的连载博客,网上有很多关于vue学习的教程,我在这里也只是记录下整个vue的学习心得和比较 ...

  8. 《Vue入门到精通》最强Vue教程,附带经典案例,万字详解,干货十足!

    目录: 一.前言 二.Vue是什么? 1.简介 2.发展史 3.为什么要学习Vue? 4.jQuery.javascript.Vue的区别 5.Vue框架构造 三.Vue的使用 1.Vue环境搭建 2 ...

  9. Vuex白话教程第一讲:Vuex到底是个什么鬼?

    Vuex白话教程第一讲:Vuex到底是个什么鬼? Vuex白话教程第二讲:Vuex旗下的State和Getter Vuex白话教程第三讲:Vuex旗下的Mutation Vuex白话教程第四讲:Vue ...

最新文章

  1. 从神经元谈到深度神经网络
  2. C++字符串之一(字符表示)
  3. MySQLdb安装的错误说明
  4. 面试时会谈薪的人一开口就赢了:让你薪资翻倍的谈薪技巧
  5. c++的set_unexpected不起作用
  6. Git异常:fatal: could not create work tree dir 'XXX': No such file or directory
  7. 面试官问:Java 中的锁有哪些?我跪了……
  8. C语言关键字之static
  9. 计算机名称重复能加域吗,关于加入域的计算机名称修改
  10. android 手机网络可以连上,wifi连上后访问不了服务器,Nexus连接WiFi成功,但提示“已连接 但无法访问互联网”...
  11. 进不了BIOS,电脑开机黑屏
  12. PySide2学习总结(三)QtWidgets和QML
  13. Centos 7 安装 ifconfig命令
  14. python豆瓣mysql_Python3.5爬取豆瓣电视剧数据并且同步到mysql中
  15. elastic APM 深入测试 一 (无嵌套调用的分布式微服务监控)
  16. https://imgsa.baidu.com/forum/pic/item/...【贴吧图床】
  17. 电脑如何破解wifi密码
  18. Gretna网络分析之先验知识
  19. Python爬虫之pyppeteer常用API快速上手
  20. 南昌不翻车 Codeforces Round #571 (Div. 2) C,D

热门文章

  1. Oracle case when的用法
  2. JAVA基础代码分享--模拟人机猜拳系统
  3. foreach 语句
  4. DataSet.Relations一例
  5. [转]SQL语句大全
  6. Spring Cloud 使用 FeignClient 启动报错
  7. 设计模式-创建型模式-建造者模式
  8. 汇编语言介绍,内存和总线的初步认识
  9. ES6/7 异步编程学习笔记
  10. 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)