Vuex 单状态库 与 多模块状态库
2018-12-11 10:14
239 查看
之前对
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之store拆分即多模块状态管理(modules)篇
- nuxt 踩坑之 -- Vuex状态树的模块方式使用
- 详解vuex之store拆分即多模块状态管理(modules)篇
- JSP调用无状态会话Bean——预定模块_book_success0.jsp
- 权限管理模块中动态加载Vue组件
- vue组件中点击按钮后修改输入框的状态实例代码
- 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionStateMod 或自定义会话状态模块 -
- MFC 模块状态的实现
- vue中单选框,利用不存在的值标示选中状态
- Vue.js数据状态管理-Vuex(-)
- MFC的模块状态:从AfxGetApp()和AFX_MANAGE_STATE()看MFC的模块状态
- vue + element-ui + scss 仿简书评论模块
- MFC的模块状态:从AfxGetApp()和AFX_MANAGE_STATE()看MFC的模块状态
- Vue中状态管理——Vuex
- 简述vue状态管理模式之vuex
- Vue 页面状态保持页面间数据传输的一种方法(推荐)
- 理解vuex -- vue的状态管理模式
- Vue小模块之用户登录功能(一)
- 前端框架Vue(10)——vuex 状态管理
- Vue.2.0.5-过渡状态