- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章一文让你彻底搞懂Vuex,满满的干货由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
官方解释:Vuex 是专为 vue.js 应用程序开发的状态管理模式.
什么是状态管理?
简单地讲:可以把多个组件都需要的变量全部存储到一个对象里面,然后这个对象放在顶层的 vue 实例中,让其他组件可以使用。这样多个组件就可以共享这个对象中的所有属性.
有些同学想着,这么简单我们自己在vue顶层定义一个对象不就可以实现共享了?我们发现虽然数据可以获取到,但是如果在某个组件内,数据改变了,那我们如何修改数据,让此数据在其他组件内保持最新呢?
我们的vuex就是为了提供一个在多个组件间共享状态的插件,而且能够实现实时响应.
vuex 是管理组件之间通信的一个插件,所以使用之前必须安装.
2.1、安装 。
1)使用 script 方式引入 。
2)使用包管理 。
注意:vuex 必须依赖 vue 使用 。
2.2、搭建 store 实例 。
创建一个 store 文件夹,新建 index.js 。
在 main.js 处,挂载 store 。
2.3、使用状态 。
3.1、state 。
state 存放 vuex 的基本数据,用来存储变量的.
单一状态树 。
Vuex 使用单一状态树,即用一个对象就包含了全部的状态数据。state 作为构造器选项,定义了所有我们需要的基本状态参数.
在组件中引用 state 数据方式:
1)通过 vue 的 computed 获取 vuex 的 state 。
store 中的数据发生改变时,都会重新求取计算属性,并更新相关 DOM.
2)如果需要使用多个参数时,都使用 computed 计算属性,就会使代码变的有些冗余和复杂,此时我们就可以借助 mapState 辅助函数.
vuex 使用单一状态树来管理应用层级的全部状态,单一状态树能够让我们最直接的方式找到某个状态的片段,而且之后的维护和调试过程,也可以非常方便管理和维护.
3.2、getters 。
从 store 中获取一些 state 变异后的状态.
使用的时候一般有两种方式:
1)返回的结果只依赖于 state 中的数据 。
此处,$store.getters.countDouble 的使用与上边的 $store.state.count 是一样的.
2)getters 中返回的变异结果,依赖于某个 getters 中属性返回结果 。
3.3、mutations 。
vuex 的store 状态的更新唯一方式:提交 Mutation.
Mutations 主要包括两部分:
字符串的事件类型 。
一个回调函数,该回调函数的第一个参数就是 state.
1)mutation 中的方法通过 commit 调用,不传参数使用:
按钮每点一次,count 就会自加一次.
2)mutations 传递参数 。
我们点击加按钮时,指定每次点击增加的数值,如下:
上个实例传递的是一个参数,如果我们需要传递多个参数时,该如何实现呢?
3)mutations 传递多个参数 。
上述方法是 mutations 特殊的提交封装。包含了 type 属性的对象,将整个 commit 的对象作为 payload 使用.
3.4、actions 。
mutations 提交更新数据的方法,必须是同步的,如果是异步使用就会出现问题,然后在项目开发中往往就会用到异步更新,比如网路请求数据.
actions 是类似于 mutation,功能大致相同,但是 actions 是用来替代 mutations 进行异步操作的.
1)actions 的基本使用 。
值得注意的是,使用 actions 异步更新数据的时候,还是需要经过 mutations 中的方法,state 中的数据只能由 mutations 中的方法修改.
调用 mutations 中的方法,使用 commit 调用.
调用 actions 中的方法,使用 dispatch 调用.
2)异步更新的时候,也可以带参数 。
3)传入异步参数 。
3.5、modules 。
modules 是模块的意思,vue 使用单一状态树,项目越来越大,store 中的数据越来越多,不便于数据的管理和维护,代码也会变得臃肿。因此使用 modules ,把数据划分到对应的某个模块,既便于开发,也提高代码的可读性.
1)modules 简单使用 。
2)模块中的数据如何使用呢?
3)调用模块内的 mutations 中的方法,如何调用呢?
调取模块内的 mutations 中的方法,与之前是一模一样的,程序会先从第一层 store 中查找方法,找不到方法时会继续去模块中查找.
4)调用模块内的 getters 内方法 。
需要注意的是,getters 中方法都是对 state 中数据变异,如果模块的 getters 方法需要根 store 中的 state 呢?
5)模块内的 actions 中的方法,使用 commit 调用 mutations 中方法时,只能调用本模块内的 mutations 方法,不能调用外层的.
Vuex 的 store 中的 state 是响应式的,当 state 中数据发生改变时,vue 组件会自动更新。这就要求我们必须遵守一些vuex对应的规则:
提前在 store 中初始化好所需的属性.
说人话,就是必须在state中定义的属性才能做到响应式,如果是后加或删除的,无法做到响应式.
举个栗子:
此时点击修改姓名的时候,可以做到响应式,而点击“增加地址”按钮时,页面没有任何反应,但是在开发者模式中可以看到数据有变化.
我们要响应式,该如何实现呢?
同样的如果要删除 age 属性时,使用 delete 也做不到响应式,需要修改为 Vue.delete.
实例:响应式删除 age 属性 。
在 mutation 中定义很多事件类型,也就是方法名。当项目越来越大时,Vuex 管理的状态越来越多,需要更新状态的情况越来越多,那么意为着 Mutations 中的方法名越来越多,方法过多时,使用的时候需要花费大量精力去记住或来回切换文件找方法名,这样很容易出错,所以推荐大家使用一个常量,即使方法名出错了,也会将错就错,程序并不会发生异常.
如:
使用的时候,只需要记住 Increase 或者在 mutation_type.js 文件内查找就好了.
原文链接:https://www.toutiao.com/a7012144273474748958/ 。
最后此篇关于一文让你彻底搞懂Vuex,满满的干货的文章就讲到这里了,如果你想了解更多关于一文让你彻底搞懂Vuex,满满的干货的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
HTTP缓存相关的问题好像是前端面试中比较常见的问题了,上来就会问什么cache-control字段有哪些,有啥区别啥的。嗯……说实话,我觉得至少在本篇来说,HTTP缓存还算不上复杂,只是字段稍
代理,其实全称应该叫做代理服务器,它是客户端与服务器之间得中间层,本质上来说代理就是一个服务器,在HTTP的链路中插入的一个中间环节,就是代理服务器啦。所谓的代理服务就是指:服务本身不生产内容,
我们在前两篇的内容中分别学习了缓存和代理,大致了解了缓存有哪些头字段,代理是如何服务于服务器和客户端的,那么把两者结合起来,代理缓存,也就是说代理服务器也可以缓存,当客户端请求数据的时候,未必一
在前面的章节,我们把HTTP/1.1的大部分核心内容都过了一遍,并且给出了基于Node环境的一部分示例代码,想必大家对HTTP/1.1已经不再陌生,那么HTTP/1.1的学习基本上就结束了。这两
我们前一篇学习了HTTP/2,相比于HTTP/1,HTTP/2在性能上有了大幅的改进,但是HTTP/2因为底层还是基于TCP协议的,虽然HTTP/2在应用层引入了流的概念,利用多路复用解决了队头
前面我们花了很大的篇幅来讲HTTP在性能上的改进,从1.0到1.1,再到2.0、3.0,HTTP通过替换底层协议,解决了一直阻塞性能提升的队头阻塞问题,在性能上达到了极致。 那么,接下
上一篇噢,我们搞明白了什么是安全的通信,这个很重要,特别重要,敲黑板!! 然后,我们还学了HTTPS到底是什么,以及HTTPS真正的核心SSL/TLS是什么。最后我们还聊了聊TLS的实
经过前两章的学习,我们知道了通信安全的定义以及TLS对其的实现~有了这些知识作为基础,我们现在可以正式的开始研究HTTPS和TLS协议了。嗯……现在才真正开始。 我记得之前大概聊过,当
这一篇文章,我们核心要聊的事情就是HTTP的对头阻塞问题,因为HTTP的核心改进其实就是在解决HTTP的队头阻塞。所以,我们会讲的理论多一些,而实践其实很少,要学习的头字段也只有一个,我会在最开始
我们在之前的文章中介绍HTTP特性的时候聊过,HTTP是无状态的,每次聊起HTTP特性的时候,我都会回忆一下从前辉煌的日子,也就是互联网变革的初期,那时候其实HTTP不需要有状态,就是个浏览页面
前面几篇文章,我从纵向的空间到横向的时间,再到一个具体的小栗子,可以说是全方位,无死角的覆盖了HTTP的大部分基本框架,但是我聊的都太宽泛了,很多内容都是一笔带过,再加上一句后面再说就草草结束了。
大家好,我是煎鱼。 在 Go 语言中总是有一些看上去奇奇怪怪的东西,咋一眼一看感觉很熟悉,但又不理解其在 Go 代码中的实际意义,面试官却爱问... 今天要给大家介绍的是 SliceHead
我是一名优秀的程序员,十分优秀!