Vue从入门到精通

第六章 状态管理

6.1.1 什么是Vuex?

Vuex 是Vue团队提供的一套组件状态管理维护的解决方案。Vuex作为Vue插件来使用,进一步完善了Vue基础代码功能,使Vue组件状态更加容易维护,为大型项目开发提供了强大的技术支持。

const store=new Vuex.Store({
    state:{},
    mutations:{}
})
var vm=new Vue({
    el:'#app',
    store
})

在上述代码中

第一行:用new创建Vuex实例对象store,它可以理解为一个容器,里面包含了应用中大部分的状态(state);

第二行:通过state配置选项定义组件初始状态,类似于Vue实例中的data属性;

第三行:为实例对象提供了mutations,通过事件处理方法改变组件状态,最终将state状态放映到组件中,类似于Vue实例中的methods属性。

6.1.2 Vuex 的下载和安装

Vuex有两种安装方式:

①直接通过<script></script>标签引入vuex.js文件;

【例子】

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入两个JavaScript文件 -->
		<script src="js/vue.js"></script>
		<script src="js/vuex.js"></script>
	</head>
	<body>
		<!-- HTML代码 -->
		<div class="app">
			<p>{{this.$store.state.name}}</p>
		</div>
		<!-- JavaScript代码 -->
		<script type="text/javascript">
			// 实例化store对象
			var store=new Vuex.Store({
				state:{
					name:'vuex.js直接引用'
				}
			})
			// 实例化Vue对象
			var vm=new Vue({
				el:'.app',
				store
			})
		</script>
	</body>
</html>

store 中的状态是响应式的,在组件中调用store中的状态时仅需要在计算属性中返回即可。下面的【例子】使用计算属性返回store中的name,age,gender,并使用 mapState 辅助函数来生成计算属性。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入两个JavaScript文件 -->
		<script src="js/vue.js"></script>
		<script src="js/vuex.js"></script>
	</head>
	<body>
		<!-- HTML代码 -->
		<div class="app">
			<p>{{name}},{{age}},{{gender}}</p>
		</div>
		<!-- JavaScript代码 -->
		<script type="text/javascript">
			// 实例化store对象
			var store=new Vuex.Store({
				state:{
					name:'Jerry',
					age:'25',
					gender:'男'
				}
			})
			// 实例化mappedState对象
			var mapState=Vuex.mapState
			// 实例化Vue对象
			var vm=new Vue({
				el:'.app',
				store,
				computed:mapState({
					name:state=>state.name,
					age:state=>state.age,
					gender:state=>state.gender
				})
			})
		</script>
	</body>
</html>

②在 npm 中安装。

使用 npm 导入 vuex 包。

【例子】

1> 使用命令切换到该项目的当前目录下,执行如下命令创建demo02项目
vue init webpack demo02
cd demo02

2>执行如下命令安装vuex
npm install vuex@3.1.1 --save

(后面的内容需要安装包,此处不多讲)

6.1.3 计数器案例

说明:每一个Vuex应用的核心就是store(仓库),即响应式容器,它用来定义应用中的数据以及数据处理工具。Vuex的状态存储就是响应式的,当store中数据状态发生变化,那么页面中的store数据也会发生相应变化。改变store中的状态的唯一途径就是显式地提交mutation ,这样可以方便跟踪每一个状态的变化。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>计数器</title>
		<!-- 引入两个JavaScript文件 -->
		<script src="js/vue.js"></script>
		<script src="js/vuex.js"></script>
	</head>
	<body>
		<!-- HTML代码 -->
		<div class="app">
			<button @click="increase">+</button>
			<p>{{this.$store.state.count}}</p>
		</div>
		
		
		<!-- JavaScript代码 -->
		<script type="text/javascript">
			// 实例化store对象
			const store=new Vuex.Store({
				// 初始化state值
				state:{
					count:0
				},
				// 修改count值
				mutations:{
					increase(state){
						state.count++
					}
				}
			})
			// 实例化Vue对象
			var vm=new Vue({
				el:'.app',
				store,
				methods:{
					increase(){
						//this.$store.commit('increase')	//后台有相应的内容显示
						this.$store.state.count++     //后台没有相应的内容显示
					}
				}
			})
		</script>
	</body>
</html>

6.1.4 Vuex 状态管理模式

vue中的单向数据流机制,在vue中,组件的状态变化是通过vue单向数据流的设计理念实现的。

new Vue({
    data(){
        return {count:0}
    },
    template:'<div>{{count}}</div>',
    methods:{
        increment(){
            this.count++
        }
    }
})

vue中的单向数据流主要包括3个部分:

1.state:驱动应用的数据源

2.view:以声明方式将state映射到视图

3.actions:响应在view上的用户输入导致的状态变化

【注意】vue的单向数据流增强了组件之间的独立性,但是存在多个组件共享状态的时候,单向数据流状态就会破坏,因此,为了数据维护更加方面,需要将组件共享状态抽离出来,用全局的单例模式来管理,在这种模式下,任何组件都能获取状态或触发行为,这就是所谓的vuex数据状态管理,vuex是专门为vue设计的状态管理库,以利用vue的细粒度数据响应机制来进行高效的状态更新。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光下的少年-熙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值