美文网首页
vuex的简单实现方式

vuex的简单实现方式

作者: 心大的少年 | 来源:发表于2020-05-25 17:56 被阅读0次

    vuex的响应式是数据是通过vue的响应式来实现的,也就是使用公共总线的方式,

    import Vue from 'vue';
    
    export class Store {
      constructor(options = {}) {
        // 可以利用vue数据的响应,
        this._vm = new Vue({
          data: {
            $store: options.state
          }
        });
        this.state = this._vm._data.$store;
        this.actions = options.actions;
        this.mutations = options.mutations;
        const { dispath, commit } = this;
        // 重写,可以再里面做一些验证什么的,自由发挥
        this.dispath = (type, payload) => dispath.call(this, type, payload); // 重写为action注入commit
        this.commit = (type, payload) => commit.call(this, type, payload);
    
      }
      dispath(type, payload) {
        const actionParams = { type, payload, commit: this.commit };
        const action = this.actions[type];
        if (!action) {
          console.error(`[vuex] unknown action type: ${type}`);
          return
        }
        action(actionParams);
      }
    
      commit(type, payload) {
        const mutation = this.mutations[type];
        if (!mutation) {
          console.error(`[vuex] unknown mutation type: ${type}`);
          return
        }
        this.isCommit = true;
        mutation(this.state, payload);
        this.isCommit = false;
      }
    }
    
    export function install(Vue) {
      Vue.mixin({ beforeCreate: vuexInit })
    }
    
    function vuexInit() {
      const options = this.$options;// 在new Vue的时候传进去的键值对都可以在this.$options里面找到
      if (options.store) {
        this.$store = options.store
      } else if (options.parent && options.parent.$store) {
        this.$store = options.parent.$store
      }
    }
    
    export default {
      Store,
      install,
      version: '__VERSION__',
    }
    

    相关文章

      网友评论

          本文标题:vuex的简单实现方式

          本文链接:https://www.haomeiwen.com/subject/iwuvahtx.html