首页 > 其他分享 >手写基础vuex

手写基础vuex

时间:2023-11-17 16:15:02浏览次数:118  
标签:Vue 基础 state ._ commit 手写 vuex options store

实现一个插件:声明 Store 类,挂载$store

Store 具体实现:

  1. 创建响应式的 state,保存 mutations、actions 和 getters
  2. 实现 commit 根据用户传入 type 执行对应 mutation
  3. 实现 dispatch 根据用户传入 type 执行对应 action,同时传递上下文
  4. 实现 getters,按照 getters 定义对 state 做派生
// 目标1:实现Store类,管理state(响应式的),commit方法和dispatch方法
// 目标2:封装一个插件,使用更容易使用
let Vue;

class Store {
  constructor(options) {
    // 定义响应式的state
    // this.$store.state.xx
    // 借鸡生蛋
    this._vm = new Vue({
      data: {
        $$state: options.state,
      },
    });

    this._mutations = options.mutations;
    this._actions = options.actions;

    // 绑定this指向
    this.commit = this.commit.bind(this);
    this.dispatch = this.dispatch.bind(this);
  }

  // 只读
  get state() {
    return this._vm._data.$$state;
  }

  set state(val) {
    console.error("不能直接赋值呀,请换别的方式!!天王盖地虎!!");
  }

  // 实现commit方法,可以修改state
  commit(type, payload) {
    // 拿出mutations中的处理函数执行它
    const entry = this._mutations[type];
    if (!entry) {
      console.error("未知mutaion类型");
      return;
    }

    entry(this.state, payload);
  }

  dispatch(type, payload) {
    const entry = this._actions[type];

    if (!entry) {
      console.error("未知action类型");
      return;
    }

    // 上下文可以传递当前store实例进去即可
    entry(this, payload);
  }
}

function install(_Vue) {
  Vue = _Vue;

  // 混入store实例
  Vue.mixin({
    beforeCreate() {
      if (this.$options.store) {
        Vue.prototype.$store = this.$options.store;
      }
    },
  });
}

// { Store, install }相当于Vuex
// 它必须实现install方法
export default { Store, install };

标签:Vue,基础,state,._,commit,手写,vuex,options,store
From: https://www.cnblogs.com/wp-leonard/p/17838983.html

相关文章

  • vue2.0源码简读(7. Vuex)
    7.1Vuex初始化这一节主要来分析Vuex的初始化过程,它包括安装、Store实例化过程2个方面。安装当在代码中通过importVuexfrom'vuex'的时候,实际上引用的是一个对象,它的定义在src/index.js中:exportdefault{Store,install,version:"__VERSION__",mapSt......
  • 学期2023-2024-1 20231416《计算机基础与程序设计》第八周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第八周作业这个作业的目标《计算机科学概论》第9章《C语言程序设计》第7章并完成云班课测试,功能设计与面向对象设计,面向对象设计过程,面向对象语言三......
  • 麒麟v10 基础镜像制作
    下载:https://archive.org/download/kylin-server-10-sp-2-x-86-release-build-09-20210524 需求:通过麒麟v10iso文件创建一个docker镜像说一下我是在麒麟的系统下创建的麒麟docker,其他系统可以对应修正,区别不大进程:挂载iso文件到目录mount-oloop/media/kylin/xxx.iso......
  • 深度学习算法原理实现——自写神经网络识别mnist手写数字和训练模型
    代码来自:https://weread.qq.com/web/reader/33f32c90813ab71c6g018fffkd3d322001ad3d9446802347《python深度学习》fromtensorflow.keras.datasetsimportmnistfromtensorflow.kerasimportoptimizersimporttensorflowastfimportnumpyasnpclassNaiveDense:d......
  • 【Java基础】Java中switch的多种写法
    Java中switch的多种写法代码需求:键盘录入一个数字(代表星期几),判断是工作日还是休息日switch最基础写法 publicstaticvoidswitchTest(){while(true){System.out.println("请输入:");Scannersc=newScanner(System.in);......
  • 1.面向对象基础面试题小结
    面向对象基础1面向对象三大特点封装、继承、多态面向过程是将解决问题的过程拆分为一个个方法执行;面向对象是先抽象出对象,由对象执行方法的方式解决问题。1)封装:将一个对象的属性封装在对象内部,不允许外部对象直接访问对象内部信息。2)继承:不同类型对象,相互之间经常有......
  • Netty-基础篇
    核心组件EventLoopGroup概念:由一个或多个EventLoop组成的组,用于处理所有的Channel的I/O操作,可以将其看作是一个线程池。1.包含多个EventLoop。2.EventLoopGroup将为每个新创建的Channel分配一个EventLoop。在每个Channel的整个生命周期内,所有的操作都将由相同的Thread执行。3......
  • 汇编语言基础语法,然后什么是汇编语法,比喻一下
    汇编语言是一种低级编程语言,它非常接近于计算机硬件的操作语言。了解汇编语言的基础语法首先需要了解它的核心概念和基本结构。汇编语言的基本概念操作码(Opcode):这是指示计算机执行特定操作的命令,如加法、减法等。操作数(Operand):这是操作码作用的对象,可以是数值、内存地址或者寄......
  • HTML基础
    html标签上基础标签图像标签及路径超链接注释及其他特殊符号html标签下表格标签列表标签表单标签(也可以直接把内容包含在label双标签内,不用for和id也能完成相同效果)其他f1vz一键注释快捷键:Crtl+/shift+alt+方向键的下,直接向下复制一行......
  • 学期2023-2024-1 20231401 《计算机基础与程序设计》第八周学习总结
    学期2023-2024-120231401《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第八周作业这个作业的目标《计算机科学概论》第9章《C语言程序设计》第7章并......