简易教程 vuex 快速学会
2018-12-17 23:16
85 查看
VUEX 就是做全局变量管理的,声明全局变量,并提供 getter 和 setter
1、安装vuex
npm install vuex –save
2、src下创建store文件夹,其中创建 index.js ,内容如下:
import Vue from 'vue'; import Vuex from 'vuex'; // 需要注册vuex到vue中 Vue.use(Vuex); // 使用 es6 语法把vuex的实例对象输出 export default new Vuex.Store({ })
3、在main.js中注册vuex
import store from './store' new Vue({ el: '#app', router, store, components: { App }, template: '<App/>' })
4、在state中声明全局变量
export default new Vuex.Store({ // 在state中去声明全局变量,在任何一个 component中通过可以通过 this.$store.state.count 访问 // 似乎不可以直接通过 this.$store.state.count = xxx 的方式改变state中的状态 state: { count: 0 }, ...
5、getter
// 在getters中声明state中变量的计算函数,缓存计算后的数据 // 1) 可以通过 this.$store.state.count 访问count // 2) 可以通过 this.$store.getters.getCount 返回计算值 getters: { // 接受state作为参数, 每次 count发生变化时, 都会被调用 getCount: state => { console.log('the state count : ' + state.count); return state.count+1; } },
6、setter
// ------------- 以下几个相当于setter ------------- // actions是异步的改变state状态,而Mutations是同步改变状态 // 可以在任何一个 component中通过 // 1) this.$store.commit('addNumCount', 5); 修改count值 // 2) this.$store.dispatch('addNumCount', 5); 去触发actions操作来改变state中的值。 mutations: { addCount: state => { ++state.count; }, // mutations的第一个参数即为 state 对象,并且可以向mutation传入额外的参数 addNumCount: (state, n) => { state.count += n; }, }, actions: { addCount: context => { // 调用 mutation context.commit('addCount'); }, addNumCount: (context, n) => { context.commit('addNumCount', n); } }
7、mapState
在任何组件中
import {mapState} from 'vuex';//用import引入mapState。 ... computed:mapState({ count:state=>state.count //理解为传入state对象,返回state.count值 }), //或者通过mapState的数组来赋值,如下: computed:mapState(["count"]) //然后页面中就可以如此使用了: <div> <hr/> <h3>{{count}}</h3> <div> <button @click="$store.commit('addCount')">+</button> </div> </div> //否则需要 $store.state.count: <div> <hr/> <h3>{{$store.state.count}}</h3> <div> <button @click="$store.commit('addCount')">+</button> </div> </div>
8、mapMutations
实际开发中我们也不喜欢看到$store.commit( )这样的方法出现,我们希望跟调用模板里的方法一样调用。
例如:@click=”addCount” 就和没引用vuex插件一样。
在组件中
import { mapState,mapMutations } from 'vuex'; ... methods:mapMutations([ 'addCount','addNumCount' ]), //也可这么写: methods:{ ...mapMutations({ add: 'addNumCount' ,// 将this.add() 映射为 this.$store.commit('addNumCount') }) }, ... <button @click="addNumCount(10)">+10</button> <button @click="add(10)">+10</button>
9、mapGetters
import { mapState,mapMutations,mapGetters } from 'vuex'; //在computed属性中加入mapGetters ...mapGetters(["count"])
10、mapActions 辅助函数
import { mapState,mapMutations,mapGetters,mapActions } from 'vuex'; methods:{ ...mapMutations({ add: 'addNumCount' ,// 将this.add() 映射为 this.$store.commit('addNumCount') }) ...mapActions(['addCount','addNumCount']) },
11、module模块组
如果全局变量太多,需要进行分组,使用module进行分组
const stateA={ count:0 } const stateB={ count: 99 } const moduleA={ stateA } const moduleB={ stateB } export default new Vuex.Store({ modules:{a:moduleA, b:moduleB} }) //模块中调用: <h3>{{$store.state.a.count}}</h3> 或 computed:{ count(){ return this.$store.state.a.count; } },
相关文章推荐
- 简易后台管理系统Vue前端快速搭建教程
- Vue快速入门教程
- c++快速简易入门教程_006继承
- Ocelot简易教程(二)之快速开始2
- Vue.js 60分钟快速入门教程
- c++快速简易入门教程_007虚函数与多态性、纯虚函数
- 【PHP基础】最快速简易apache+mysql本地PHP环境搭建教程
- c++快速简易入门教程_008函数的覆盖和隐藏
- dedecms织梦怎么仿站 快速学会dedecms仿站教程
- 【PHP基础】最快速简易apache+mysql本地PHP环境搭建教程
- MongoDB教程快速学会入门 第5篇 主从复制
- c++快速简易入门教程_009引用
- 8篇MongoDB教程快速学会入门 第1篇 基础入门
- MongoDB教程快速学会入门 第1篇 基础入门
- MongoDB教程快速学会入门 第6篇 索引操作
- c++快速简易入门教程_010回调函数
- Vue.js开发环境快速搭建教程
- svm工具箱快速入手简易教程
- Vue.js 2.0 详细教程 快速上手 - 基础篇
- 8篇MongoDB教程快速学会入门 第2篇 细说增删查改