37.VueJs学习-VueX原理

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

一、核心概念

1.State:
  • 定义:存储应用的状态数据,是单一状态树,即一个对象就包含了全部的应用层级状态。
  • 作用:组件可以从 state 中获取需要的数据,而不是通过父子组件之间的 props 传递或者事件派发的方式来共享数据,使数据管理更加集中和高效。
  • 例如:一个购物车应用中,state 可能包含商品列表、购物车中的商品、用户信息等数据。
2.Getters:
  • 定义:可以理解为 store 的计算属性,就像计算属性在组件中的作用一样,getters 可以基于 state 进行计算得到新的数据。
  • 作用:对 state 中的数据进行加工处理后返回给组件,也可以接收其他 getters 作为参数,实现更复杂的数据处理逻辑。
  • 例如:在购物车应用中,可以通过 getters 计算购物车中商品的总价、已选商品的数量等。
3.Mutations:
  • 定义:是更改 Vuex store 中状态的唯一方法,是同步函数。
  • 作用:用于修改 state 中的数据,每个 mutation 都有一个字符串的事件类型(type)和一个回调函数(handler),这个回调函数就是用来进行状态更改的实际操作。
  • 例如:在购物车应用中,可以定义一个名为 addItemToCart 的 mutation,用于将一个商品添加到购物车的状态中。
4.Actions:
  • 定义:类似于 mutation,不同在于 actions 提交的是 mutation,而不是直接变更状态,并且 actions 可以包含任意异步操作。
  • 作用:用于处理异步逻辑和复杂的业务逻辑,然后通过提交 mutation 来修改状态。
  • 例如:在购物车应用中,从服务器获取商品数据的操作可以放在 action 中,获取到数据后再提交 mutation 将数据添加到 state 中。

二、工作原理

1.组件访问 Vuex 状态:
  • 组件通过 this.$store.state.xxx 来访问 state 中的数据。
  • 通过 this.$store.getters.xxx 访问 getters 计算得到的数据。
2.组件触发状态变更:
  • 组件不能直接修改 state 中的数据,而是通过提交 mutation 来实现状态的变更。例如 this.$store.commit('mutationName', payload)
     
  • 如果涉及异步操作,则先在组件中触发 action,例如 this.$store.dispatch('actionName', payload)。action 内部进行异步操作,完成后提交 mutation 来修改状态。
3.Vuex 内部实现机制:
  • Vuex 通过 Vue 的插件机制实现了对 Vue 实例的注入,使得在 Vue 组件中可以通过 this.$store 访问到 Vuex 的 store 对象。
  • 当 state 中的数据发生变化时,Vuex 会通知依赖这个数据的组件进行更新,这是通过 Vue 的响应式系统实现的。Vuex 将 state 中的数据包装成响应式对象,当数据发生变化时,Vue 的响应式系统会自动触发相关组件的重新渲染。
  • 总之,Vuex 通过集中式的状态管理,使得 Vue.js 应用的状态管理更加清晰、可维护和可预测,尤其适用于中大型复杂应用的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值