Vuex 单状态库 与 多模块状态库
之前对 Vuex
进行了简单的了解。近期在做 Vue
项目的同时重新学习了 Vuex
。本篇博文主要总结一下 Vuex
单状态库和多模块 modules
的两类使用场景。
本篇所有代码是基于 Vue-Cli 3.x 版本的脚手架工具进行编写的。
vuex 单状态库 Demo
这是一个仅有单个 Vuex store
状态库的 Demo
。当项目中使用一个 Vuex
状态库就已经足够的时候,可以使用这种方式。
本 Demo 使用了一个 increment 与 decrement 的 增 / 减 事件来体现 store 数据的变化。
store.js
由于状态库是单一的,仅有一个 store.js
文件管理状态库。在该文件中一开始进行 import
的引入,然后使用 Vue.use(Vuex)
使用 Vuex
,之后分别定义 state
、mutations
和 actions
,并通过 export default new Vuex.Store({state, mutations, actions})
模块化。
// store.js
import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) const state = {
count: 1
} const mutations = {
increment(state) {
state.count ++
},
decrement(state) {
state.count --
}
} const actions = {
increment:({commit}) => {
commit('increment')
},
decrement:({commit}) => {
commit('decrement')
}
} export default new Vuex.Store({state, mutations, actions})
main.js
在入口文件 main.js
中通过 import 引入 store
,并注册到 Vue
的实例上。
import Vue from 'vue'
import App from './App.vue'
import store from './store' // Vue-Cli 3.x
new Vue({
render: h => h(App),
router,
store
}).$mount('#app') // Vue-Cli 2.x
// new Vue({
// el: '#app',
// router,
// store,
// components: { App },
// template: '<App/>'
// })
使用 $store
在相应的组件中如下引入并在 methods
中使用 mapActions
。
<template>
<div class="vuex">
Vuex 全局 Store count {{$store.state.count}}
<button type="button" name="button" @click="increment">加</button>
<button type="button" name="button" @click="decrement">减</button>
</div>
</template> <script>
import { mapActions } from 'vuex'
export default {
methods: mapActions([
'increment',
'decrement'
])
}
</script> <style scoped> </style>
Demo
关于单状态库的 Demo
请参考此 github
Github Demo
vuex 多模块状态库 Demo
当项目变得非常庞大,单个 store
无法满足需求的时候,可以通过多模块状态库管理多个 store
,将各类状态分类进行维护。
本 Demo 使用了 add 与 reduce 的 增 / 减 事件来体现 store 数据的变化。
store
由于需要管理多个 store
,因此在项目目录中创建 store
文件夹,并创建 modules
文件夹用来放置各个 store
文件,并使用 index.js
作为入口文件。具体结构请查看 Demo
。
main.js
同样在 main.js
中通过 import
引入 store
,但这里是引入 index.js
这个入口文件。
import Vue from 'vue'
import App from './App.vue'
import store from './store/index'
使用 $store
除了使用方式有一定不同之外,methods
中的 mapActions
也更换了书写方式,第一个参数是对应 store
管理的数据,第二个参数是关于操作事件的数组。
<template lang="html">
<div class="a">
page a {{$store.state.countA.countA}} <button type="button" name="button" @click="add">增加</button>
<button type="button" name="button" @click="reduce">删减</button>
</div>
</template> <script>
import { mapActions } from 'vuex'
export default {
methods: mapActions('countA',['add','reduce'])
}
</script> <style lang="css">
</style>
Demo
关于多模块状态库的 Demo
请参考此 github
Github Demo
Vuex 单状态库 与 多模块状态库的更多相关文章
- MFC模块状态(一)
先看一个例子: 1.创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: #define IDD_DLL_DIALOG 2000 ...
- MFC 模块状态的实现
本技术备忘录介绍MFC “模块状态”结构的实现.充分理解模块状态这个概念对于在DLL中使用MFC的共享动态库是十分重要的. MFC的状态信息分为三种:全局模块状态数据.进程局部状态数据和线程局部状态数 ...
- saltStack 状态模块(状态间的关系)
unless onlyif:状态间的条件判断,主要用于cmd状态模块 常用方法: onlyif:检查的命令,仅当'onlyif' 选项指向的命令返回true时才执行name 定义的命 unle ...
- python3中urllib库的request模块详解
刚刚接触爬虫,基础的东西得时时回顾才行,这么全面的帖子无论如何也得厚着脸皮转过来啊! 原帖地址:https://www.2cto.com/kf/201801/714859.html 什么是 Urlli ...
- (转)python标准库中socket模块详解
python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...
- Java Web学习总结(21)——http协议响应状态码大全以及常用状态码
http协议响应状态码大全以及常用状态码 当我们在浏览网页或是在查看服务器日志时,常会遇到3位数字的状态码,这3位数字是什么意思呢?其实,这3位数字是HTTP状态码,用来表示网页服务器HTTP响应状态 ...
- UICollectionViewCell选中高亮状态和UIButton的高亮状态和选中状态
UICollectionViewCell选中高亮状态 //设置点击高亮和非高亮效果! - (BOOL)collectionView:(UICollectionView *)collectionView ...
- Android 实现子View的状态跟随父容器的状态
最近自学着做东西,需要做一个效果,就是我ListView的Item点击下或者选中的时候,我Item里面的各个组件的状态要和我Item的状态保持一直,这样我就可以用XML,去根据组件的不同状态去实现不同 ...
- Python OS模块标准库的系统接口及操作方法
Python OS模块标准库的系统接口及操作方法 os.name 返回当前操作系统名,定义了'posix','nt','mac','os2','ce','java'(我使用win7/python3.1 ...
随机推荐
- amcharts属性
Amcharts的特点包含: *动画或静态 *价值轴能够扭转 *线性或对数轴的价值尺度 *提前定义或定制的子弹 *定制描写叙述不论什么数据点 *点击栏目/酒吧(可用于钻孔下来图表) *梯度弥漫 *价值 ...
- BZOJ2435:[NOI2011]道路修建 (差分)
Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...
- 1818: [Cqoi2010]内部白点
Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1394 Solved: 625 [Submit][Status][Discuss] Descriptio ...
- (第一章)改善JavaScript,编写高质量代码。
根据<编写高质量代码改善JavaScript程序的188个建议>这本书,来记录我目前所了解的建议方式. 建议1:警惕Unicode乱码 根据ECMA标准规定JavaScript语言可以使用 ...
- windows 下nginx配置php支持
修改nginx配置 location ~ \.php$ { root D:/Learn/php/test/; fastcgi_pass ; fastcgi_index index.php; fastc ...
- 个性化 UIAlertController
系统的 UIAlertController 封装的很漂亮,用block代替之前 UIAlertView 的代理,用起来更方便的,但是其曝露出来的接口也不多如果要个性化一些东西,比如字体大小.颜色就不是 ...
- ZOJ 3983 Crusaders Quest(思维题)
C - Crusaders Quest Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu S ...
- 用kubeadm 搭建 高可用集群问题记录和复盘整个过程 - 通过journalctl -u kubelet.service命令来查看kubelet服务的日志
1.根据 https://github.com/cookeem/kubeadm-ha/blob/master/README_CN.md 去搭建ha集群,遇到几个问题: runtime networ ...
- linux 学习第十八天学习(DNS分离解析、DHCP配置、邮件服务配置)
DNS分离解析技术 yum install bind-chroot systemctl restart named systemctl enable named vim /etc/named.conf ...
- python科学计算和可视化学习报告
一丶numpy和matplotlib学习笔记 1. NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Pyth ...