vuex是vue的状态管理工具,vue进阶从es6和npm开始,es6推荐阮一峰大神的教程

vuex学习从官方文档和一个记忆小游戏开始。本着兴趣为先的原则,我先去试玩了一把-->

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,如果你刚接触这个东东肯定像我一样蒙,所以我选择把这个游戏的源码从头到尾看一遍,主要看文件夹vuex里的actions,mutations,store部分,理解了一行就加一个批注。直到全部理解了为止。

从图说起:

这个图最简单的表示了vuex的工作流程。以memory小游戏为例,它的主要组件是chessboard组件,下面是一堆card组件,在小游戏的stage对象里面有一个leftmatched对象,用于表示还有多少对扑克牌没有匹配成功。

vuex store实例

每一个 Vuex 应用的核心就是 store(仓库),这里存放了应用中的大部分状态stage,操作状态的mutations,触发mutations的actions。

以上面的那个小游戏为例,最基本的有三个状态stage,ready,playing,pass,分别表示开始玩之前,正在玩和通关三种状态,这些状态都被放在stage中。

在mutations中有一个reset方法,用于重置通关后再来一局。将cards全部翻转过去,也就是重置了状态。

可以用类比来理解store实例:

Vue Vuex
Vue实例vm Vuex.Store 实例store
vm的data属性 store实例的stage属性
vm的methods方法 store实例的mutations方法
vm的computed属性 store实例的getter属性

上面的每一条在作用上基本上可以看作是一一对应的,stage对应data,getters对应computed属性等。

store实例的生成

看来自教程的代码,与生成vue实例一样,同样是调用一个构造函数Vuex.Store,并传入一个option对象,从而生成一个store实例。这个实例包含了应用的状态,和改变应用状态的方法。

const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
}
})

但是store实例尽管提供了改变状态的方法,它本身是不改变状态的。改变状态的源头来自组件和生命周期的钩子函数。 在组件中,使用计算属性来读取应用的状态,通过action——>mutation——>stage来改变应用的stage。

另外,并不是说应用的所有状态都应该放到vuex的stage中,stage主要放用于共享的,或者应用级别的状态,memory小游戏为例,一张卡片是否翻转应该属于card组件的状态,应当局部存放,而玩家匹配了几组卡片则属于应用层面的状态,应当放在vuex中。

vuex的注入

vuex的store实例是作为生成vue实例的选项之一被注入到vue实例中的,同时可以被实例中的各组件所访问。看下面的例子main.js用于生成vue实例,store.js用于生成store实例:

//main.js
import store from './vuex/store'//引入store实例 new Vue({
el: '#app',
template: '<App/>',
components: { App },
store //store作为生成vue实例的选项之一,与el,template等一起被引入
}) //store.js export store实例,在上面被引入
import Vuex from 'vuex'
Vue.use(Vuex);
/..../
export default new Vuex.Store({//store实例接口,没有写actions
state,
getters,
mutations
})

vuex和组件

vuex是一个就像一个状态仓库,组件想要访问这些共享的状态,或者触发改变状态的mutations方法,可以这样做:

this.$store.stage.onlyUnfinish//访问共享的状态
this.$store.commit(listByImportant)//出发vuex mutations中的排序方法

vuex 初体验的更多相关文章

  1. Nuxt+Vuex初体验

    小呀嘛小二郎,背着书包上学堂... 今天一个困扰了我一周时间的问题终于被我解决了,值得庆祝 在Nuxt中使用Vuex实现数据存储 首先: 在store目录下新建一个index.js文件 需要有两个组件 ...

  2. Vue+Vuex初体验

    首先: 安装vuex npm install vuex -S 需要有两个组件(HelloWord.vue 和 HelloDemo.vue)[组件自定义] 注册路由 注册store 测试 一.需要有两个 ...

  3. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  4. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  5. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  6. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  7. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  8. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  9. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

随机推荐

  1. TWS笔试题---回家想了想答案,希望对jobseeker有帮助

    1,jsp的9大内置对象 request,response,session,application,page,pageContext,out,config,exception 查过资料了,现在补充一下 ...

  2. python语言中的编码问题

    在编程的过程当中,常常会遇到莫名其妙的乱码问题.很多人选择出了问题直接在网上找答案,把别人的例子照搬过来,这是快速解决问题的一个好办法.然而,作为一个严谨求实的开发者,如果不从源头上彻底理解乱码产生的 ...

  3. 后端Java工程师常用JavaScript_DOM

    JavaScript [1]事件 ①用户操作网页或者浏览器所发生的交互行为称为事件.比如:点击按钮,最小化窗口,修改文本框内容等. ②JS为我们定义许多浏览器中的事件.比如:单击(onclick).双 ...

  4. 和transformjs一起摇摆

    写在前面 记得以前facebook做过一款HTML5游戏.开场动画是一块软体类似豆腐的东西一起摇摆.类似的效果如下面的gif所示: facebook当时使用的是createjs下的子项目easeljs ...

  5. Android进阶--Acticivity的启动模式

    一.引言 我们在多次启动同一个Activity时,系统默认会重复创建多个实例,这样看上去便十分的愚蠢,所以android在设计时提供了启动模式来修改系统的默认行为.目前有四种启动模式:standard ...

  6. 如何禁止内部viewPager滑动

    众所周知,viewPager是能够滑动的,但有时候我们需要禁止它的滑动(微笑地面对*----*). 情况是这样的: activity中有一个viewPager,viewPager中加入3个Fragme ...

  7. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  8. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  9. sys.dm_os_waiting_tasks 引发的疑问(中)

    上一篇我们说了一下sys.dm_exec_requests 和 sys.dm_os_waiting_tasks 在获取并行等待的时候得不同结果,这一篇我们谈论下我的第二个疑问:为什么一个并行计划(4线 ...

  10. CentOS(5.8/6.7)linux生产环境若干优化实战

    CentOS系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行.在此讲解几点关于Linux系统安装后的基础优化操作.注意:本次优化都是基于CentOS(5.8/6.7). 下 ...