来实现一个缩水版Vuex

对 Vuex 源码进行浓缩,DIY 一个小型 Vuex

功能如下

  1. 通过 $store.commit 改变 $store.state
  2. 实现 strict model

源码约70行左右比较好理解,下面讲解一下两个比较重要的点。

install

Vue.use(Vuex)实际上调用的是 Vuex 的 install 方法,该方法在每个组件的 beforeCreate 钩子中为当前组件注入 $store,使所有组件的 $store 属性都指向同一个对象,也就是创建 Vue 实例时传入的 store 对象。

监听 store

为什么当 state 对象发生变化时视图会被更新?原因是 store 内部创建了一个 Vue 对象对 state 进行监听(见源码 resetStoreVM 方法)。而且上面也提到,使用 Vuex 后,所有组件的 $store 都引用的都是同一个 store。所以当 state 变化时,绑定了 state 的视图都会更新。

原文地址:https://segmentfault.com/a/1190000017049048

原文地址:https://www.cnblogs.com/lovellll/p/10124402.html

时间: 2024-10-19 22:31:06

来实现一个缩水版Vuex的相关文章

对于同一套应用程序如何发布一个体验版(有部分功能)完整版(有完整功能)

最近项目中,先做一个版本给用户(普通用户作为体验使用).之后再有一个完整功能版. #define OFFLINE using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 完整版_精简版 { class Program { static void Mai

直播的本质(创业者应该要从商业模式的右边开始思考,你为用户创造了什么价值?找客户并不难,但要想办法让客户不离不弃;PC端功能的丰富很重要,因为手机版通常只是一个迷你版)

我想稍微给直播这件事浇点冷水. 的确,直播现在越来越火,YouTube凭着良好的基础建设平台前段时间也做起了直播,Facebook Live最近也加入了变脸.预定直播时间和双人录制的功能,更不用说国内的如火如荼:KTV在直播.电商行业在直播.金融行业在直播.不过想想以前的球赛.晚会也是直播,这并不稀奇.真正带来巨大改变的是移动端直播的兴起,让人具备了随时随地观看的可能,所以说关键是技术创新的整体“生产率提升”效应,而不是创新本身提高了“生产力”水平.我们对互联网连接一切这种文化所做的选择,结果却

TaskScheduler一个.NET版任务调度器

TaskScheduler是一个.net版的任务调度器.概念少,简单易用. 支持SimpleTrigger触发器,指定固定时间间隔和执行次数: 支持CronTrigger触发器,用强大的Cron表达式满足日历形式的复杂触发规则: 支持动态添加和删除任务,可根据具体需求实现复杂逻辑: static void Main(string[] args) { Scheduler scheduler = new Scheduler(); SimpleTrigger simpleTrigger = new S

【C++】实现一个简洁版的class String

//实现一个简洁版的class String #include <iostream> #include <string.h> using namespace std; class String { public: String() { _str = new char[1]; _str[0] = '\0'; } String(const char *str) { _str = new char[strlen(str) + 1]; strcpy(_str, str); } String

【MEF】构建一个WPF版的ERP系统

引言 MEF是微软的一个扩展性框架,遵循某种约定将各个部件组合起来.而ERP系统的一大特点是模块化,它们两者的相性很好,用MEF构建一个ERP系统是相当合适的.下面简单演示如何构建一个简单版的ERP系统. 简单分析 从框架的角度来看,一个好的ERP系统应该至少具备以下两个特点: 1.模块开发.一个大型ERP系统要靠团队开发的,每个人负责的模块可能都不一样,要保证低耦合和开发进度,每个模块必须要能够独立开发测试,最终才组合起来. 2.实时更新.ERP系统的模块经常会有功能性修改,升级频繁,要保证良

心愿:做一个精简版MFC

我觉得自己有能力看懂MFC的C++代码和总体流程,但是由于MFC混杂了太多的东西,比如OLE等等不必要的东西,又做了无数的ASSERT判断,影响整体流程的理解.因此我要做一个精简版的MFC,而且能用它做开发,就是用现有的VC++小程序编译.仍可照样运行.这么做的原因是,希望把MFC的所有思想融为自己身体的一部分,能在主流OS上的开发应用的时候如臂使指. 一般情况下,不会改动它的语句,但有必要的话,也会改动,看情况-

分享一个Android版 仿QQ局域网即时通信软件(可发文件、语音、录音)

一.支持的功能有文字信息交互.语音聊天.发送文件和录音 源码会在后面附上. 二.UI展示图 三.经过我的测试,是非常成功的.只是有一点不足就是语音实时通话的时候声音会回声甚至死机. 文件传送和文字,录音都比较成功. 四.本软件是用Java编码,在安卓平台上的应用.使用了UDP协议和TCP协议. 大家可以学习这两部分的代码. 里面注释还是比较多. 五.当然我只是个学生,这个只是学生版本,仅供大家学习借鉴之用.绝对不能用于商业拿去直接卖,或者改改就上架某市场. 六.宣传下本人的小制作: 单机斗地主-

1——自我实现一个简洁版的String类

在C++中有C没有的string字符串类型,string类型的数据其实是一个指向字符串首地址的指针变量,因此在string类的默认成员函数拷贝构造和赋值运算符的重载就会涉及到深浅拷贝的问题,一不小心要么就是内存泄露要么就是多次释放同一块空间导致程序崩溃,下面就来模拟实现一个简洁版的String类: 既然是指向一个字符串的指针,因此类的成员变量就需要有一个char*类型的指针: #include <iostream> #include <string.h> using namespa

node.js 还没有发布一个正式版,核心团队已经另起炉灶

node.js核心团队中的4人(共5人)离开原团队,另起炉灶 io.js 异步IO回调语言开发,在开源历史上又一次成功证明一门活力四射技术但凡被商业公司包养,最后的下场都比较惨,就像之前的mysql ,其作者不认同oracle 公司的种种规定限制,从而另立炉灶开发了一款开源数据库一样. java的下场好吗? 被sun抛弃后转手嫁给了oracle !!! 历史如此巧合,包养node.js技术的公司貌似很快也面临被oracle 收购..... oracle 到底要搞成那样,还能不能一起愉快的玩耍了!