Vuex的基础知识

本文深入介绍了Vuex的状态管理库,包括其基本使用、计数器案例、核心概念如State(状态)、Mutation(修改状态的正确方式)、Action(处理异步操作)以及Getter(计算属性)。通过实例展示了如何在Vue组件中利用Vuex进行数据共享和状态管理,强调了在大型项目中使用Vuex进行状态管理的重要性。
摘要由CSDN通过智能技术生成

一,Vuex的概述

之前学习的组件间传值:
在这里插入图片描述
然而在实际开发过程中,组件间的传值远远比这些复杂,所以又引入了Vuex。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二,Vuex的基本使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三,使用vuex的计数器小案例地初始化

在这里插入图片描述
在这里插入图片描述

<template>
  <div >
     <my-addition></my-addition>
	 </hr>
	 <my-subtraction></my-subtraction>
  </div>
</template>

<script>
	//导入两个组件
	import Addition from './components/Addition.vue'
	import Subtraction from './components/Subtraction.vue'
	export default{
		data(){
			return{}
		},
		//将这两个组件注册为根组件的子组件
		components:{
			'my-addition':Addition,
			'my-subtraction':Subtraction
		}
	}
</script>

<style>
</style>

四,Vue的核心概念—State

在这里插入图片描述
也就是说,各个组件都能接收到的数据,就偷偷放在这里!!
那么新的问题来了,各个组件又要怎样才能获取到这个数据呢?卖身吗?显然不是!!
在这里插入图片描述

// 2.创建Store对象并导出
export default new Vuex.Store({
	//全局共享的数据放置在state里面
  state: {
		count:0
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

在这里插入图片描述
而在template中,this指向本身这个vue实例,所以this可以省略:

<template>
	<div>
		<h3>当前最新的count值为:{{$store.state.count}}</h3>
		<button>-1</button>
	</div>
</template>

在这里插入图片描述
这样处理之后,就可以直接把count当作该组件的计算属性直接使用了!
显然,在大量使用count的时候,这个方法可以少些很多代码:

<template>
	<div>
		<h3>当前最新的count值为:{{count}}</h3>
		<button>+1</button>
	</div>
</template>

<script>
	import {mapState} from 'vuex'
	export default{
		data(){
			return{}
		},
		computed:{
			//这样写之后,就可以把count当作本组件的计算属性直接使用了
			...mapState(['count'])
		}
	}
</script>

<style>
</style>

五,vuex的核心概念—Mutation

在这里插入图片描述
按之前的思路,修改数据是采用这种方法,但是这种方法不推荐。因为随着项目越写越大,当我们想查看是哪个不要脸的组件修改了公共数据,就得一个组件一个组件地去翻,去查找,烦人!!
于是推荐使用mutation来完成store中数据的更改,因为mutation就放置在state旁边,要查找不是很容易嘛!!
在这里插入图片描述
在这里插入图片描述

// 2.创建Store对象并导出
export default new Vuex.Store({
	//全局共享的数据放置在state里面
  state: {
	count:0
  },
  mutations: {
	 add(state){
		 //参数是state对象 ,既然获取到这个对象,就可以用state.count访问其中的数据
		 state.count++
	 }
  },
  actions: {
  },
  modules: {
  }
})
<template>
	<div>
		<h3>当前最新的count值为:{{count}}</h3>
		<button @click="handle">+1</button>
	</div>
</template>

<script>
	import {mapState} from 'vuex'
	export default{
		data(){
			return{}
		},
		computed:{
			//这样写之后,就可以把count当作本组件的计算属性直接使用了
			...mapState(['count'])
		},
		methods:{
			handle(){
				//通过this.$store.commit(函数名)调用store中的对应函数
				this.$store.commit('add')
			}
		}
	}
</script>

<style>
</style>

在这里插入图片描述
r让它自增加3
在这里插入图片描述

<template>
	<div>
		<h3>当前最新的count值为:{{count}}</h3>
		<button @click="handle">+1</button>
	</div>
</template>

<script>
	import {mapState} from 'vuex'
	export default{
		data(){
			return{}
		},
		computed:{
			//这样写之后,就可以把count当作本组件的计算属性直接使用了
			...mapState(['count'])
		},
		methods:{
			handle(){
				//通过this.$store.commit(函数名)调用store中的对应函数
				this.$store.commit('add',3)
			}
		}
	}
</script>

<style>
</style>

在这里插入图片描述
而如果在mutation中执行异步操作,容易出问题,所以,又引出了Action

六,vuex核心概念—Action

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七,vuex核心概念—Getter

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值