很多技术,刚接触的时候:这是啥?用的时候:哟嚯,是挺好用的!加以研究:卧槽,就是这么个逼玩意儿!

最近接手了一个别人写了1/5的vue项目(页面画了1/3,接口啥都没对);

对于表格中的数据项操作以及点击查看详情,这位同学都是用了很奇葩的处理方式,存store!也就是vuex的中央管理器。

看完我就心中默念一句:卧槽!!!你这不是玩单机么。好好的一个web应用被你整成了单机版。

一、vuex

之前只是知道vuex,也几乎没怎么用过,但是这个项目被这位同学搞成了vuex,那我必须得先知道vuex到底是怎么玩的啊,于是百度看了一下。几篇文章看下来,对vuex了解得差不多了。

二、状态管理的实质

其实所谓的vuex的状态管理,多个视图组件依赖同一个状态,组件通信,这些乱七八糟的表述,实质只有四个字:单例模式

对于单例模式,如果你不了解的话,那我这里也没工夫去阐述,可能后续我会在设计模式分类中详细讲一下单例模式。

三、vuex的应用场景

并不是所有的应用都适合用vuex,比如我接手的这个项目,就只是一个员工入职信息录入以及展示,根本就不会涉及到多组件之间的信息传递,这位同学copy了一份其他项目的源码,费好大劲删删改改弄成这样,事情是干了不少,但是都是无用功,何必呢!我主张拥抱技术,但绝不是滥用技术!

当多个视图依赖同一状态的时候,vuex是很适合的,因为所有的视图都可以去访问/修改同一个状态实例下的属性,你不必在意组件之建信息如何传递,不用想方设法地去处理父子组件、不同组件之间的信息传递问题,因为这个状态实例是全局的,在项目初始化的时候就引入了这个实例(store),所以所有的组件都是可以编辑的,这是单例模式给我们带来的便捷。

四、vuex的数据留存问题

利用vuex的时候,我们把所有的信息都是存在store这个实例下的,大家都可以操作这个实例,但是这个对象是存在内存里面的,当你的项目经过一系列的操作,往store里面存了很多信息之后,按一下F5,你会发现这个store里面的信息被初始化了。

这是因为,F5的时候,整个项目的Vue对象从内存里面销毁了,刷新之后,又根据main.js重新初始化,所以store也会被初始化啊,这样一来,你存在store里的信息也就淡然无存了。

但是,你可能会发现,我http请求还是可以发啊,token还是有的啊!那是因为用户信息一般是存在浏览器存储里的,虽然表面上看,我们拿用户信息,是类似于this.$store.getters.userinfo,如果你往深里面追的话,就会发现这个用户信息必然是从浏览器存储里面拿的(Local Storage、Cookies等等)。

五、都存浏览器

既然存浏览器就能保证数据不丢失,那么为了处理业务逻辑,那么我们的数据是不是可以都存浏览器存储,然后通过$store去浏览器存储拿呢?

其实,这样做没有什么不可以,但是:

我最近遇到一个问题,我有一个同事,可能是为了秀一把他store玩得有多好吧,把用于信息共享的数个字段全部存到store(存到浏览器存储),先说一半,大家来看一下这张图:

没错,就是URL(统一资源定位符),一直以来我们都是用url的形式来获取一个特征值,然后再在页面用XHR去根据这个参数值来查相关信息,然后填充页面,因为这些数据时需要时时获取的。

像这种东西,每跳一个页面都可能出现数据改变的可能,这种东西,你能存本地???

可能是我的这位同事做内网项目太久的原因亦或是想秀一把吧,就直接把一个项目的相关信息全部存到store,还说他们就是这么玩的。

所以,个人认为,涉及业务逻辑并且有时刻产生变化可能性的数据坚决不能存本地。

对于上面的图,根据我的提示改变课程号,你会感谢我的。(因为现在直接搜索的话有些慕课网的课程你是很难搜到的,当然,我已经不看慕课网很久了,希望能帮到你们)。

浅谈vuex的更多相关文章

  1. 浅谈vuex使用方法(vuex简单实用方法)

    Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vu ...

  2. 浅谈Vue不同场景下组件间的数据交流

    浅谈Vue不同场景下组件间的数据“交流”   Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完 ...

  3. 【Vue】浅谈Vue不同场景下组件间的数据交流

    浅谈Vue不同场景下组件间的数据“交流”   Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完 ...

  4. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  5. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  6. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  7. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  8. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  9. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

随机推荐

  1. samtools flags 的含义

    对于双端比对的数据,生成的BAM文件中,R1端序列和R2端序列的标识符是一样的,之前一直不知道如何根据bam文件区分哪条序列是R1端,哪条序列是R2端,昨天仔细研究了一下,原来代表R1端和R2端的信息 ...

  2. ImportError: No module named Crypto.Cipher

    from Crypto.Cipher import AES 报错: ImportError: No module named Crypto.Cipher 解决方法: pip install pycry ...

  3. 怎么将unbuntu Linux iOS 文件从U盘或者移动硬盘启动?用win32diskimager_cn

    win32diskimager_cn 选择文件类型的时候选择*

  4. [hibernate]org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter

    org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type sette ...

  5. NHibernate初学二之简单执行SQL及HQL、Linq

    上篇文章简单介绍NHibernate之简单增删改查,本文将会简单介绍有关执行NHibernate的SQL.HQL及存储过程: 一:执行SQL语句实例,运用CreateSQLQuery方法 public ...

  6. kafka中配置细节

    今天遇到kafka发送消息的时候,一直报Kafka“Failed to send messages after 3 tries”错误,根据网上找问题,修改各种配置参数,各种重启,还是解决不了问题. 郁 ...

  7. docker学习-docker解决了什么问题

    docker标准化让快速扩张.弹性伸缩变得简答.

  8. MongoDB(二)-- Java API 实现增删改查

    一.下载jar包 http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 二.代码实现 package com.xbq.mongo ...

  9. docker 配置文件:/etc/docker/daemon.json

    /etc/docker/daemon.json 是 docker 的配置文件,默认是没有的,需要我们手动创建,可配置项如下: [root@localhost ~]$ vim /etc/docker/d ...

  10. 《C++ Primer Plus》第14章 C++中的代码重用 学习笔记

    C++提供了集中重用代码的手段.第13章介绍的共有继承能够建立is-a关系,这样派生类可以重用基类的代码.私有继承和保护继承也使得能够重用基类的代码,单建立的是has-a关系.使用私有继承时,积累的公 ...