Vuex中的核心概念state,getters,mutations,actions

本文详细介绍了Vuex的状态管理机制,包括如何创建和访问公共数据源(Store)、组件中两种访问State的方式、Mutation的使用规范及示例、Action的处理异步操作的原理和触发方式,以及Getter如何加工处理数据并实时响应变化。通过实例展示了Vuex在Vue应用中管理状态的关键概念和实践方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章是在观看视频时随笔做的,在此附上
B站视频链接以及Vuex官方文档

Vuex提供唯一的公共数据源,所有共享的数据都要统一放到store的State中进行存储
//创建store数据源,提供唯一公共数据
const store = new Vuex.Store({
	state:{count:0}
})

state
组件中访问state中的数据  第一种方式
this.$store.state.全局数据名称

组件访问state中数据      第二种方式
1.从vuex中按需导入mapState函数
import {mapState} from 'vuex'
通过刚才导入的mapState函数,将当前组件所需的全局数据,映射为当前组件的computed计算属性:
2.将全局数据,映射为当前组件的计算属性
computed:{
	...mapState(['全局数据名'])
}


mutation
mutation用于变更store中的数据
1.只能通过mutation变更store数据,不可以直接操作store中的数据
2.通过这种方式虽然操作起来繁琐,但是可以集中监控所有数据的变化
用法:
//定义mutation
mutations:{
	//添加一个方法名为add的方法来该百年state中的数据,第一个参数永远是state
	add(state) {
		//变更状态
		state.count++
	}
}
//触发mutation
methods: {
	handle() {
		//触发mutations的第一种方式
		this.$store.commit('add')
	}
}
//可以在触发mutations时传递参数
//store中
addN(state,step) {
	//变更状态
	state.count += step
}
//组件中
handle() {
	//在调用commit函数,触发mutations时携带参数
	this.$store.commit('addN',3)
}
触发mutations的第二种方式
//1.从vuex中按需导入mapMutations函数
import {mapMutations} from 'vuex'
//2.组件中,将指定的mutations函数,映射为当前组件的methods函数
methods: {
	//映射了两个方法
	...mapMutations(['add','addN'])
	//组件中触发事件
	btn() {
		//this.addN(step)
		this.addN(3)
	}
}

actions:action用于处理异步操作
如果通过异步操作变更数据,必须通过action,而不能使用mutation,但是在action中还是要通过触发mutation的方法间接变更数据
actions: {
	//此处调用形参context,来触发.commit方法
	addAsync (context) {
		setTimeout(()=>{
			//在action中,不能直接修改state中的数据;必须通过context。commit()触发某个mutation才行
			context.commit('add')
		},1000)
	}
}
//组件中,触发action
methods: {
	handle() {
		//运用dispatch 触发actions 的第一种方式
		this.$store.dispatch('addAsync')
	}
}
触发action异步任务时携带参数:
action: {
	addNAsync (context,step) {
		setTimeout(()=>{
			//携带的参数传递给mutation
			context.commit('addN',step)
		},1000)
	}
}
//组件中
methods: {
	handle() {
		//在调用dispatch函数,触发actions时携带参数
		this.$store.dispatch('addNAsync',5)
	}
}
//触发actions的第二种方式
1.从vuex中按需导入mapActions函数
import {mapActions} from 'vuex'
2.将指定的actions函数,映射为当前组件的methods函数
methods:{
	...mapActions(['subAsync'])
	btnhandle3() {
		this.subAsync()
	}
}

getter用于对store中的数据进行加工处理成新的数据,不会修改数据,只会包装数据
1.getter可以对store中的已有数据加工处理之后形成新数据,类似于Vue的就算属性。
2.store中的数据发生变化,getter的数据也会跟着变化
//定义getter
getters:{
	showNum: state=> {
		return '当前最新的数量是['+ state.count +']'
	}
}
使用getters的第一种方式:
this.$store.getters.名称
使用getters的第二种方式:
import {mapGetters} from 'vuex'
computed :{
	...mapGetters(['showNum'])
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值