范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

单例模式vuex的数据管理哲学

  保证一个类仅有一个实例,并提供一个访问它的全局访问点 ,这样的模式就叫做单例模式。
  单例模式是设计模式中相对较为容易理解、容易上手的一种模式,同时因为其具有广泛的应用场景,也是 面试题里的常客 。因此单例模式这块我们除了讲解单例模式的原理及其在 Vuex 中的应用实践(本节),还会附上两道面试真题供大家练手(下节)。 单例模式的实现思路
  现在我们先不考虑单例模式的应用场景,单看它的实现,思考这样一个问题:如何才能保证一个类仅有一个实例?
  一般情况下,当我们创建了一个类(本质是构造函数)后,可以通过new关键字调用构造函数进而生成任意多的实例对象。像这样: class SingleDog {     show() {         console.log("我是一个单例对象")     } }  const s1 = new SingleDog() const s2 = new SingleDog()  // false s1 === s2
  楼上我们先 new 了一个 s1,又 new 了一个 s2,很明显 s1 和 s2 之间没有任何瓜葛,两者是相互独立的对象,各占一块内存空间。而单例模式想要做到的是, 不管我们尝试去创建多少次,它都只给你返回第一次所创建的那唯一的一个实例 。
  要做到这一点,就需要构造函数 具备判断自己是否已经创建过一个实例 的能力。我们现在把这段判断逻辑写成一个静态方法(其实也可以直接写入构造函数的函数体里): class SingleDog {     show() {         console.log("我是一个单例对象")     }     static getInstance() {         // 判断是否已经new过1个实例         if (!SingleDog.instance) {             // 若这个唯一的实例不存在,那么先创建它             SingleDog.instance = new SingleDog()         }         // 如果这个唯一的实例已经存在,则直接返回         return SingleDog.instance     } }  const s1 = SingleDog.getInstance() const s2 = SingleDog.getInstance()  // true s1 === s2
  除了楼上这种实现方式之外,getInstance的逻辑还可以用 闭包 来实现: SingleDog.getInstance = (function() {     // 定义自由变量instance,模拟私有变量     let instance = null     return function() {         // 判断自由变量是否为null         if(!instance) {             // 如果为null则new出唯一实例             instance = new SingleDog()         }         return instance     } })()
  可以看出,在getInstance方法的判断和拦截下,我们不管调用多少次,SingleDog都只会给我们返回一个实例,s1和s2现在都指向这个唯一的实例。 生产实践:Vuex中的单例模式
  近年来,基于 Flux 架构的状态管理工具层出不穷,其中应用最广泛的要数 Redux 和 Vuex。无论是 Redux 和 Vuex,它们都实现了一个全局的 Store 用于存储应用的所有状态。这个 Store 的实现,正是单例模式的典型应用。这里我们以 Vuex 为例,研究一下单例模式是怎么发光发热的: 理解 Vuex 中的 Store
  Vuex 使用单一状态树,用一个对象就包含了全部的应用层级状态。至此它便作为一个"唯一数据源 (SSOT)"而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。 ——Vuex官方文档
  在Vue中,组件之间是独立的,组件间通信最常用的办法是 props(限于父组件和子组件之间的通信),稍微复杂一点的(比如兄弟组件间的通信)我们通过自己实现简单的事件监听函数也能解决掉。
  但当组件非常多、组件间关系复杂、且嵌套层级很深的时候,这种原始的通信方式会使我们的逻辑变得复杂难以维护。这时最好的做法是将共享的数据抽出来、放在全局,供组件们按照一定的的规则去存取数据,保证状态以一种可预测的方式发生变化。于是便有了 Vuex,这个用来存放共享数据的唯一数据源,就是 Store。
  关于 Vuex 的细节,大家可以参考Vuex的官方文档,此处提及 Vuex,除了为了拓宽大家的知识面,更重要的是为了说明单例模式在生产实践中广泛的应用和不可或缺的地位。如果对 Vuex 没有兴趣,那么大家只需关注"一个 Vue 实例只能对应一个 Store"这一点即可。 Vuex如何确保Store的唯一性
  我们先来看看如何在项目中引入 Vuex: // 安装vuex插件 Vue.use(Vuex)  // 将store注入到Vue实例中 new Vue({     el: "#app",     store })
  通过调用 Vue.use()  方法,我们安装了 Vuex 插件。Vuex 插件是一个对象,它在内部实现了一个 install 方法,这个方法会在插件安装时被调用,从而把 Store 注入到Vue实例里去。也就是说每 install 一次,都会尝试给 Vue 实例注入一个 Store。
  在 install 方法里,有一段逻辑和我们楼上的  getInstance   非常相似的逻辑:let Vue // 这个Vue的作用和楼上的instance作用一样 ...  export function install (_Vue) {   // 判断传入的Vue实例对象是否已经被install过Vuex插件(是否有了唯一的state)   if (Vue && _Vue === Vue) {     if (process.env.NODE_ENV !== "production") {       console.error(         "[vuex] already installed. Vue.use(Vuex) should be called only once."       )     }     return   }   // 若没有,则为这个Vue实例对象install一个唯一的Vuex   Vue = _Vue   // 将Vuex的初始化逻辑写进Vue的钩子函数里   applyMixin(Vue) }
  楼上便是 Vuex 源码中单例模式的实现办法了,套路可以说和我们的 getInstance  如出一辙。通过这种方式,可以保证一个 Vue 实例(即一个 Vue 应用)只会被 install 一次 Vuex 插件,所以每个 Vue 实例只会拥有一个全局的 Store。小结
  这里大家不妨开个脑洞,思考一下:如果我在 install 里没有实现单例模式,会带来什么样的麻烦?
  我们通过上面的源码解析可以看出,每次 install 都会为Vue实例初始化一个 Store。假如 install 里没有单例模式的逻辑,那我们如果在一个应用里不小心多次安装了插件: // 在主文件里安装Vuex Vue.use(Vuex)  ...(中间添加/修改了一些store的数据)  // 在后续的逻辑里不小心又安装了一次 Vue.use(Vuex)
  失去了单例判断能力的 install 方法,会为当前的Vue实例重新注入一个新的 Store,也就是说你中间的那些数据操作全都没了,一切归 0。因此,单例模式在此处是非常必要的。

(科技)特斯拉交付首批电动卡车新华社旧金山12月1日电(记者吴晓凌)美国特斯拉公司1日在位于内华达州的超级工厂举行仪式,向百事可乐公司交付了首批电动卡车Semi。特斯拉公司介绍,Semi电动卡车可在20秒内从静数字技术泛在联接智能世界来源经济参考报记者吴蔚综合报道数字经济时代,技术创新正不断促进更广泛的联接,消弭数字鸿沟满足人们的联接需求,在带来更多经济增长的同时,也将实现更多的社会价值。数字技术持续赋能统计数各位监护人!儿童玩火家长可能要承担法律责任近日息县谯楼街道一民居内发生火灾经过消防救援人员的全力抢救屋内还是一片狼藉屋顶被烟雾熏黑许多家电家具都遭到破坏有的甚至已经无法辨认出原貌只剩焦黑一片万幸的是因抢救及时火灾没有造成人10年后,生物3D打印市场的三巨头生物3D打印属于3D打印技术的重要分支,是指一种以计算机三维模型为图纸,装配特制生物墨水,最终制造出人造器官和生物医学产品的新科技手段。目前该技术主要分为喷墨生物打印挤压生物打印和又一自主巨头猛攻增程技术,增程混动之争该告一段落了2022年即将过去,可混动技术和增程技术到底谁更好的争论仍没停下,并且这争论还不只是停留在消费者层面,为了证明自家技术的先进性,就连部分车企大佬也开始针锋相对。事实上,技术先不先进家电巨头TCL想要抢占你家的房顶文孙静2019年,坐落于美国新泽西州郊区的贝尔实验室面目一新。覆盖于中庭天窗的3200面玻璃,被更换为透光的光伏电池阵列。据称这一改造可以满足建筑内部15的用电需求。作为人类历史上R7首月交付即超1500,猜猜这波一试千金又能带来多少新订单?近日,新能源车企纷纷交出了最新的月交付量成绩单,可以说是几家欢喜几家愁。造车新势力早期的蔚小理头部阵营已被打破,小鹏直接遭遇滑铁卢特斯拉销量火爆但同时库存也刷新记录,需求增长疲软,明日大雪,有钱没钱,记得吃3根,忌3样,顺季而食安稳过冬暖冬生活记千里黄云白日曛,北风吹雁雪纷纷,明日大雪,是农历二十四节气中的第21个节气,也是冬天的第三个节气,标志着寒冷冬天的正式开始。俗话说冬进补,开春打虎,冬季养生,在借助自然之汪汪队又立大功啦!想夸一句厉害了,缉毒犬!近日警犬贝勒布林协助云南警方破获两起特大毒品案视频加载中(视频来源人民网福建)警犬贝勒和布林在追踪嫌疑人时通过嗅闻脚印分别示警民警上前检查查获冰毒23。27公斤!是不是想夸一句厉害专访中国驻智利大使牛清报中国加入DEPA将成中智双边合作新的推进器我对中国加入数字经济伙伴关系协定(DEPA)前景充满信心。中国驻智利大使牛清报近日接受21世纪经济报道记者专访时表示。今年8月,中国加入DEPA工作组正式成立,全面推进中国加入DE福建有一农妇,一觉睡了6年,醒来后不仅没有衰老还变漂亮了大家好,我是老探。在福建省永泰县,有这样一位睡神,她叫刘兰珍,一提到她,在他们当地可以说,是无人不知,无人不晓,她一觉可以睡6年,而且80多天不吃不喝,也没有生命危险,并且这一特殊
地球上有没有发现过四维物体的三维投影?四维物体,出了长宽高外,还需要一个额外的维度才能够支撑其存在。就以目前我们的宇宙表现来看,我们的宇宙是三维的(时间除外),而非四维的,存在于我们宇宙的物体也都是三维的。但是,虽然我凌晨升级鸿蒙系统,今天突然发现,速度慢了好多,有没有同感的?我在鸿蒙发布当天就升级了,没有发现速度慢,反而比原来更加流畅,明显的快了很多。6月4日升级了鸿蒙之后,内存少占用3。2G,运行流畅,速度远快于安卓,一次也没有卡顿过。说鸿蒙速度慢的戒烟之后身体有哪些症状?戒烟对身体的变化大家似乎都应该能说出一二,癌症心血管疾病和呼吸系统疾病的患病风险将大大降低。然后,如果从人的整体健康来看的话,戒烟之后的另一个潜在改变还包括你的心理健康。想想人们为男生上海年薪65万,无对象,回西安的华为40万还是继续留在上海?先说我的观点留在上海。再说我的理由,具体如下理由一上海是国际的大都市,又是你现在的工作地,对你而言,在上海的发展机会更多,成功的机会更大。上海市在中国的地位是不用多说都能知道的,在南昌城市轨道交通第二轮建设规划修编,地铁34号线东延庐山旅游轨道有新消息吗?前不久,江西省人民政府发文,其中,关于地铁的最新规划,就有提到题主说的那三条地铁。而在这三条地铁,将会在2020年与一号线北沿线,2号线东延线同时开工。地铁3号线东延线,之前有市民李霄鹏只是过渡,下一位国足教练会是谁?高洪波?郝伟?孙继海?李霄鹏只是过渡,下一位国足教练会是谁?高洪波?郝伟?孙继海?看来足协是都让这些人试一下国足主教这个位置,过渡,过渡,永远都是过渡,足球越来越差,原耒女足可以,现在女足也一路下滑,总如果选五个位置的国际球员跟梦之队比赛(都是巅峰状态),你会选谁?我是体坛霸主我来回答这个问题都是巅峰状态我会选纳什吉诺比利基里连科诺维斯基姚明。为什么选这5人呢?且看以下分析控球后卫纳什(入选关键词传球)国籍加拿大传球纳什立足NBA靠的就是一手在武汉坐知音号是一种怎样的体验?知音号是武汉现在运作最好的文化旅游景区。这里和传统的旅游景点或者戏剧是完全不同的,如果游客想玩得到位,一些基本功课还是要做。在导演组的专业术语里,这个项目要被称为漂移的互动式体验剧云贵川渝的中产,资产需要达到什么水平?其他方面呢?现在好多所谓的中产,实际上焦虑得不行,有的虽然身价在500600w以上的级别,但是资产中很大一部分的比例,是在房产等不动产上,流动性相对比较低,特别是房价比较高的北上广深,有的一套河南省退休职工2021年平均养老金是多少?感谢邀请,更感谢楼主的提问。楼主您好,河南省退休职工2021年的平均养老金是多少?我查阅了资料,发现2021年平均养老金在全国范围内还没有出台,这是由于虽然已经确定2021年养老金什么颜色的大衣好看又百搭?我是时尚号作者,平时喜欢研究服装穿搭,希望回答对您有帮助!大衣是秋冬季节必备单品,颜色和面料也是多种多样,大衣好搭配衣服,保暖又有型,每个女孩的衣橱都有好几件大衣,一起来看看怎么搭