实现原理_Vuex的实现原理

你知道vuex如何工作的吗?先来看下图了解下

3839e4d2732a6d387a9b4d8cf3e1e93f.png

了解图之后看来下代码的实现原理吧

let Vue;class Store { constructor(options){ this.getters = {}; this.mutations = {}; this.actions = {}; this._vm = new Vue({ data: { state: options.state } }) const { getters,mutations,actions } = options; if(getters){ Object.keys(getters).forEach((key)=>{ Object.defineProperty(this.getters, key, { get: ()=>getters[key](this.state) }) }) } if(mutations){ Object.keys(mutations).forEach(key=>{ this.mutations[key] = () => { mutations[key].call(this, this.state); }; }) } if (actions) { Object.keys(actions).forEach(key=>{ this.actions[key] = () => { actions[key].call(this, this); }; }) } } get state(){ return this._vm.state } commit = (type) => { this.mutations[type](this) }  dispatch = (type) => { this.actions[type](this) }}const install = function(_Vue){ Vue = _Vue Vue.mixin({ beforeCreate(){ if(this.$options && this.$options.store){ this.$store = this.$options.store }else{ this.$store = this.$parent && this.$parent.$store } } })}export default {install, Store}

以上代码的核心其实在为什么在里面增加了new Vue(),单纯的修改数据不能做到数据响应式,试图还是无法更新的,所以利用了Vue的特性来实现试图更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值