浅谈vuex
很多技术,刚接触的时候:这是啥?用的时候:哟嚯,是挺好用的!加以研究:卧槽,就是这么个逼玩意儿!
最近接手了一个别人写了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的更多相关文章
- 浅谈vuex使用方法(vuex简单实用方法)
Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vu ...
- 浅谈Vue不同场景下组件间的数据交流
浅谈Vue不同场景下组件间的数据“交流” Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完 ...
- 【Vue】浅谈Vue不同场景下组件间的数据交流
浅谈Vue不同场景下组件间的数据“交流” Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
随机推荐
- db2 over()
说起 DB2 在线分析处理,可以用很好很强大来形容.这项功能特别适用于各种统计查询,这些查询用通常的SQL很难实现,或者根本就无发实现.首先,我们从一个简单的例子开始,来一步一步揭开它神秘的面纱,请看 ...
- LR中点鼠标做关联(winsock协议)
转自:http://blog.csdn.net/zeeslo/article/details/1661791 今天写一下winsock的关联操作. 以前看过一个文档.在英文版的讲winsock的,其中 ...
- 基于Nginx反向代理及负载均衡
基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是 ...
- 查询_修改SQL Server 2005中数据库文件存放路径
1.查看当前的存放路径: select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.maste ...
- C++与Java混合编程
现在的程序员,不再像以前一样,掌握一种编程语言就可以混得有模有样了,现实的情况是,真实的项目中,通常是涉及多种编程语言,举几个简单的例子,一个软件为了快速开发,可能是使用Delphi或VB作为界面开发 ...
- Unity3D协程
协程介绍 Unity的协程系统是基于C#的一个简单而强大的接口 ,IEnumerator,它允许你为自己的集合类型编写枚举器.这一点你不必关注太多,我们直接进入一个简单的例子来看看协程到底能干什么.首 ...
- 无法在Word中打开MathType怎么办
MathType是一种数学公式编辑器,通常我们都是与Office文档配合使用,但是如果大家在Word中使用MathType编辑公式时,遇到MathType无法打开的情况,我们应该怎么办?下面我们就针对 ...
- php错误:You don't have permission to access / on this server.
以前php环境崩溃了,重新装了个,打开第一个文件就出现: You don't have permission to access / on this server.错误,让我情以何堪啊,居然说我此台服 ...
- RedisTemplate实现事物问题剖析和解决
一.问题描述 Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,Redis对事物支持不会很复杂,当一个客服端连接Redis服务时,发出了MULTI命令时,这个连接会进入事物,在执行MU ...
- 【java】java内存模型 (1)--基础
并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信 ...