VUE学习(四) vuex

组件状态管理

在这里插入图片描述

state :驱动应用的数据源
view :以声明方式将state映射到视图
actions :响应在view上的用户输入导致的状态变化

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

组件通信方式

父传子
子组件中通过props接受数据,父组件中给子组件通过相应属性传值
子传父
$emit $on
不相关组件
因为组件不相关,所以创建一个eventbus来处理通信
其他方式
$root $parent $children $refs(不推荐,只有项目很小时才好使用)

Vuex

Vuex是专门为Vue设计的状态管理库,采用集中式的方式存储需要共享的状态,作用是进行状态管理,解决复杂组件通信和数据共享
在这里插入图片描述

State
单一状态树,集中存储所有状态数据,并且是响应式的

getter
类似于组件中的计算属性,如果想对state中的数据做简单处理并加以展示,就可以使用getter

mutation
状态(state)的修改必须通过提交mutation,mutation必须是同步执行,这样可以保证收集到所有的状态修改

action
提供异步操作

module
把单一状态树拆分成多个模块,每个模块可以拥有自己的mutation,action,getter,甚至是嵌套子模块

简单模拟Vuex

let _Vue = null;//存储 install 获取的 vue 构造函数
class Store {
	construnctor (options) {
		const {
			state = {},
			getters = {},
			mutations = {},
			actions = {}
		} = options;
		this.state = _Vue.observable(state);
		this.getters = Object.create(null);
		Object.keys(getters).forEach(key => {
			Object.defineProperty(this.getters, key, {
				get: () => {getters[key](state)}
			})
		})
		this._mutations = mutations;
		this._actions = actions;
	}
	commit (type, payload) {
		this._mutations[type](this.state, payload);
	}
	dispatch (type,payload) {
		this._actions[type](this, payload);
	}
}
function install (Vue) {
	_Vue = Vue;
	//通过混入 beforeCreate 来获取 vue 实例
	_Vue.mixin({
	 beforeCreate () {
	 	if (this.$options.store) {
	 		_Vue.prototype.$store = this.$options.store;
	 	}
	 }
	})
}
export default {
 Store,
 install
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值