首页 > 其他分享 >#yyds干货盘点#简单的vuex实现

#yyds干货盘点#简单的vuex实现

时间:2023-03-13 21:32:46浏览次数:50  
标签:yyds Vue const state 干货 ._ vuex options store

实现一个vuex插件

​pvuex​​ 初始化: Store声明、install实现,vuex.js:

let Vue;
// 定义install方法 完成赋值与注册
function install(_Vue) {
Vue = _Vue;
Vue.mixin({
beforeCreate() {
if (this.$options.store) {
Vue.prototype.$store = this.$options.store;
}
}
});
}
// 定义sotre类,管理响应式状态 state
class Store {
constructor(options = {}) {
this._vm = new Vue({
data: {
$$state:options.state
}
});
}
get state() {
return this._vm._data.$$state
}
set state(v) {
return v
}
}
function install(_Vue) {
Vue = _Vue;
Vue.mixin({
beforeCreate() {
if (this.$options.store) {
Vue.prototype.$store = this.$options.store;
}
}
});
}


export default { Store, install };

实现 ​​commit​​ :根据用户传入type获取并执行对应 ​​mutation​

 
// class Store...
constructor(options = {}) {
// 保存用户配置的mutations选项
this._mutations = options.mutations || {}
}
commit(type, payload) {
// 获取对应的mutation
const entry = this._mutations[type]
// 传递state给mutation
entry && entry(this.state, payload);
}

实现​​ actions ​​:根据用户传入type获取并执行对应 action

constructor(options = {}) {
this._actions = options.actions || {}

const store = this
const {commit, action} = store
// 将上下文指定为sotre实例
this.commit = this.commit.bind(this)
this.dispatch = this.dispatch.bind(this)
}
dispatch(type, payload) {
// 获取对应的action
const entry = this._actions[type]

return entry && entry(this, payload);
}

实现 ​​getters ​​, 并利用computed属性缓存.

// class Store

const store = this
const computed = {}
Object.keys(this._getters).forEach(key => {
computed[key] = function(){
store._getters[key](store.state)
}
Object.defineProperty(this.getters, key, {
get(){
return store._vm[key]
},
set(v){
console.log(v)
}
})
});
this._vm = new Vue({
data: {
$$state:options.state
},
computed
});

标签:yyds,Vue,const,state,干货,._,vuex,options,store
From: https://blog.51cto.com/u_11365839/6118680

相关文章

  • #yyds干货盘点#Vuex中的store
    每一个​​Vuex​​应用的核心就是store(仓库)。store基本上就是一个容器,包含着应用中大部分的state(状态)。​​Vuex​​和单纯的全局对象有以下两点不同:​​Vuex​​ 的状态......
  • #yyds干货盘点#聊一聊SSL卸载
    一.SSL延迟互联网迅猛发展的背后隐藏着许多安全隐患,对此,各种加密技术应运而生。​​SSL​​(SecureSocketLayer安全套接层)协议便是一种广泛应用于保障互联网交易安全的加密......
  • #yyds干货盘点#数据分析报表怎么做
    1.明确报表目的和受众在开始制作报表之前,首先需要明确报表的目的和受众。这有助于你选择适当的指标、图表类型和语言风格,以确保报表能够传达想要的信息并被受众所理解。2.选......
  • #yyds干货盘点 【React工作记录十六】关于三个数组的判断
     目录​​前言​​​​导语​​​​数据格式​​​​代码部分​​​​总结​​前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作......
  • VueRouter路由与Vuex状态管理
    路由的基本搭建与嵌套路由模式vue路由的搭建路由在vue中属于第三方插件,需要下载安装后进行使用。版本说明一下,Vue3搭配的是VueRouter4,目前正常安装的话,就是路由4的版本......
  • 解锁ChatGPT超高级玩法,展示动态图片,纯干货分享!
    文/ 韩彬 这段时间在玩ChatGPT,总是文字,我有点玩腻了,突然想让ChatGPT返回一张图片,可是它却答复: 很抱歉,作为一个语言模型,我无法展示图片。但你可以在搜索引擎中搜索......
  • 数仓建模——属性#yyds干货盘点#
    概念首先需要知道的是:在数据建模中,属性和实体之间存在一种内在的关系属性是实体的属性或特征。换句话说,实体是属性的宿主,而属性则是描述实体的各种特性的方式。属性可以......
  • #yyds干货盘点# LeetCode程序员面试金典: 计算器
    1.题目:给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。表达式仅包含非负整数,+,-,*,/四种运算符和空格 。整数除法仅保留整数部分。......
  • #yyds干货盘点# LeetCode面试题:字符串相乘
    1.简述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的BigInteger库或直接将输......
  • 数据建模——实体#yyds干货盘点#
    数据仓库(DataWarehouse)是一个存储企业数据的集合,是一个综合性的数据存储环境,用于支持企业的决策制定和分析。在数据仓库中,实体是指可以被表示和存储的实际或抽象的对象,例......