vuex的使用

vuex

1、概念

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

即用来保存需要管理的状态值,值一旦被修改,所有引用该值得地方会自动更新。

应用场景:

  • 多个视图依赖于同一状态
  • 来自不同视图的行为需要变更同一状态

此时,将共享状态抽取出来,以一个全局单例模式管理

适用于中大型单页应用(j简单应用时,可以用store模式解决)

2、使用

每一个Vuex应用的核心就是store(仓库)。“store”相当于一个容器,它包含着应用中大部分状态(state).
Vuex和单纯的全局对象有以下两点不同:
1、Vuex的状态存储是响应式的,当Vue组件从store中读取状态时,若store中的状态发生变化,那么响应的组件也会响应地得到高效更新;
2、不能直接改变store中的状态,改变store中的状态的唯一途径就是提交mutation。

安装

npm install vuex --save

目录
在src目录下新建一个目录store,该目录下新建一个index.js,用来创建vuex实例,然后在该文件中引入vue和vuex,创建Vuex.store实例保存到变量store中,最后使用export default导出store:

import Vue from 'Vue';//引入vue
import Vuex from 'Vuex';//引入vuex

Vue.use(Vuex);//使用vuex

//创建vuex实例
const store=new Vuex.Store({
})

//导出store
export default store

引入
在main.js文件中引入该文件,在文件里面添加import store from ‘./store’;,再在vue实例全局引入store对象;

几种基本状态
State

import Vue from 'Vue';//引入vue
import Vuex from 'Vuex';//引入vuex

Vue.use(Vuex);//使用vuex

//创建vuex实例
const store=new Vuex.Store({
	state:{
		count:1;
	}
})

//导出store
export default store

调用
在页面通过this.$store.state调用state中的值。

Getters
Getters相当于vue中的computed计算属性,getter的返回值会根据它的依赖被缓存存起来,且只有当它的依赖值发生了改变才会被重新计算,Getters可以用于监听state中的值得变化,返回计算后的结果。

import Vue from 'Vue';//引入vue
import Vuex from 'Vuex';//引入vuex

Vue.use(Vuex);//使用vuex

//创建vuex实例
const store=new Vuex.Store({
	state:{
		count:1;
	},
	getters:{
		getStateCount:function(state){
			return state.count+1;
		}
	}
})

//导出store
export default store

调用
this.$store.getters.getStateCount

Mutations
修改状态,同步,类似于组件中的定义事件。

import Vue from 'Vue';//引入vue
import Vuex from 'Vuex';//引入vuex

Vue.use(Vuex);//使用vuex

//创建vuex实例
const store=new Vuex.Store({
	state:{
		count:1;
	},
	getters:{
		getStateCount:function(state){
			return state.count+1;
		}
	},
	mutations:{
		add(state){
			state.count=state.count+1;
		},
		reduction(state){
			state.count=state.count+1;
		}
	}
})

//导出store
export default store

Actions
在actions中提交mutation函数,异步操作

import Vue from 'Vue';//引入vue
import Vuex from 'Vuex';//引入vuex

Vue.use(Vuex);//使用vuex

//创建vuex实例
const store=new Vuex.Store({
	state:{
		count:1;
	},
	getters:{
		getStateCount:function(state){
			return state.count+1;
		}
	},
	mutations:{
		add(state){
			state.count=state.count+1;
		},
		reduction(state){
			state.count=state.count+1;
		}
	},
	actions:{
		addFun(context){
			context.commit("add");
		},
		reductionFun(context){
			context.commit("reduction")
		}
	}
})

//导出store
export default store

调用
this.$store.dispatch(“addFun”)

mapState、mapGetters、mapActions
简化写法
在页面中引入

import {mapState,mapActions,mapGetters} from 'vuex';

computed中

computed:{
	mapState({
		count1:state=>state.count
	})
},

之后在页面中可以直接调用count1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值