IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vuex 的简单模拟、了解Vuex -> 正文阅读

[JavaScript知识库]Vuex 的简单模拟、了解Vuex

Vuex

首先回顾基础示例,模拟实现一个 Vuex 实现同样的功能

import Vue from 'vue' 
import Vuex from 'vuex' 
Vue.use(Vuex)
export default new Vuex.Store({
  state: { 
  	count: 0, 
  	msg: "Hello World" 
  },
  getters: {
    reverseMsg(state) {
      return state.msg.split("").reverse().join("");
    },
  },
  mutations: {
    increate(state, payload) {
      state.count += payload.num;
    },
  },
  actions: {
    increate(context, payload) {
      setTimeout(() => {
        context.commit("increate", { num: 5 });
      }, 2000);
    },
  },
});

实现思路

Vuex下拥有install方法和Store类。即创建一个Vuex的模块,这个模块导出install方法和Store类。

实现 install 方法

  • Vuex 是 Vue 的一个插件,所以先实现 Vue 插件约定的 install 方 法。
    Vue.use内部会调用Vuex对象的install方法。
    install作用:在install中把创建Vue根实例时传入的store对象注入到Vue实例原型上的$store中。这样,在所有组件中可以通过this.$store获取到Vuex中的仓库,从而可以在所有组件中共享状态。

实现 Store 类

首先store是一个类,它的构造函数接受一个对象作为参数,这个对象中的属性就是我们熟悉的 state、getters、mutations、actions。(这里简单模拟)

  • 实现构造函数,接收options。
  • state的响应话处理。
  • getterr的实现。
  • commit、dispatch方法。

实现

目录结构
---- myvuex
------ index.js

index.js

let _Vue = null;

class Store {
  constructor(options) {
    const { state = {}, getters = {}, mutations = {}, actions = {} } = options;

    this.state = _Vue.observable(state);

    // 此处不直接 this.getters = getters,会产生死递归
    this.getters = Object.create(null);
    Object.keys(getters).forEach((key) => {
      Object.defineProperty(this.getters, key, {
      	// 箭头函数 返回通过key在getters中获取到的方法的执行 结果
        get: () => getters[key](this.state), // 这里是state如何传到getters中的
      });
    });
	// mutations actions都是内部属性,不希望外部直接访问到
    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;
  // 在install中不能直接获取Vue实例,可以通过混入beforeCreate来获取Vue实例
  // 从而拿到选项中的store对象
  _Vue.mixin({
    beforeCreate() {
      if (this.$options.store) {
        Vue.prototype.$store = this.$options.store;
      }
    },
  });
}

// 导出模块
export default {
  Store,
  install,
};
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:09:15  更:2022-05-05 11:13:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:04:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码