Vuex的四大金刚

Vuex的四大金刚

1.State(单一状态树)

state中放的是键值对
在store下的index.js代码如下

export default new Vuex.Store({
	state: {
		number: 1,
		number2:2,
		number3:3
	},
	mutations: {},
	actions: {},
	modules: {}
})

2.Mutation

修改state中的属性值

export default new Vuex.Store({
	state: {
		number: 1,
		number2:2,
		number3:3
	},
	mutations: {
		//其中有两个参数,参数一为state对象,参数二为调用下面方法传过来的值
		numberAdd(state){
			state.number++;
		},
		number2Add(state,number){
			state.number2=number
		}
	},
	actions: {},
	modules: {}
})

在组件中调用的方法

<template>
	<div class="homeWrap">
		这里是首页{{$store.state.number}}
		这里是首页{{$store.state.number2}}
		<button @click="numberChange">点击</button>
		<button @click="number2Change">点击</button>
	</div>
</template>

<script>
	export default{
		methods:{
			numberChange(){
				this.$store.commit('numberAdd');
			},
			number2Change(){
				this.$store.commit('number2Add',3);
			}
		}
	}
</script>

通过this.$store.commit()方法调用Vuex中的Mutation中的方法来改变State中的值

3.Action

当异步操作的时候在Action中进行,因为Mutation中不支持异步方法
store中的代码

export default new Vuex.Store({
	state: {
		number: 1},
	mutations: {
		numberAdd(state){
			state.number++;
		}
	},
	actions: {
		//异步操作
		//context上下文 在这里指mutations
		anumberAdd(context){
			setTimeout(()=>{
				//这里定时调用的是mutations中的numberAdd方法
				context.commit('numberAdd')
			},1000)
		}

	},
	getters:{},
	modules: {}
})

组件中的使用

<template>
	<div class="homeWrap">
		<p>{{$store.state.number}}</p>
		<button @click="numberChange">点击</button>
	</div>
</template>

<script>
	export default{
		methods:{
			numberChange(){
				//在组件中使用调用的是dispath方法
				this.$store.dispath('anumberAdd');
			}
		}
	}
</script>

4.Getter

类似于组件中的计算属性,当我使用Vuex中state中的属性值的时候需要进行计算,可以使用Getter,Getters中的方法接受两个参数 参数一 state 参数二 getters
例如:当你想使用State中的number2,并且需要获得number2的平方的时候

export default new Vuex.Store({
	state: {
		number: 1,
		number2:2,
		number3:3
	},
	mutations: {
		//其中有两个参数,参数一为state对象,参数二为调用下面方法传过来的值
		numberAdd(state){
			state.number++;
		},
		number2Add(state,number){
			state.number2=number
		}
	},
	actions: {},
	getters:{
		powerCounter(state){
			return state.number2 * state.number2
		},
		//当使用getters中的方法的时候想传入参数,return一个函数,并且调用,
		powerCounter2(state,getters){
			return (number)=>{
				state.number2*number;
				console.log(getters);//这个getters是store中的Getters
			}
		}
	},
	modules: {}
})

组件中的使用

<template>
	<div class="homeWrap">
		<!-- 你可以在这里使用这种方法进行计算-->
		<h2>{{$store.state.number2 * $store.state.number2 }}</h2>
		<!-- 同时你也可以使用getters中的方法 -->
		<h2>{{$store.getters.powerCounter}}</h2>
		<!-- 调用Getters中的方法传入参数 -->
		<h2>{{$store.getters.powerCounter(2)}}</h2>
		<button @click="numberChange">点击</button>
	</div>
</template>

<script>
	export default{
		methods:{
			numberChange(){
				this.$store.commit('changeNumber')
			}
		}
	}
</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值