State

Vuex是用来管理某个应用的整个状态,那么一个应用只能有一个Vuex实例。和React一样,Vuex也不允许直接去修改state,而是通过提交mutation,来触发状态变更。Vuex的状态存储是响应式的,若store中的状态发生变化,相应的组件也会得到相应的高效更新。从store的实例中读取状态最简单的方法是在计算属性中返回某个状态。例如:每当store.state.count变化的时候,都会重新求取计算属性,之后触发更新相关联的DOM.

Getter

为什么会定义Getter呢?这是因为如果你想从store的state中派生出一些状态,例如对列表进行过滤并计数。这时我们会首先想到使用computed。就是使用计算属性,这样在state变化时,DOM也能做出及时变化。但是如果你想将这个方法用到多个组件中,这时候也许你会复制此段代码,或者抽象成一个模块,在多个组件中引入。这两个办法看起来都不是一个好方法。

因此,Vuex定义了Getter,这个方法放在store中,这时候可以供给多个组件同时使用。因为Getter的产生是因为想从state中派生出一些状态,所以getters中的方法的第一个参数是state。第二个参数可以是getter。

Mutation

Mutation意为变动。前面说过更改Vuex的store中的状态的唯一办法是提交mutation。Vuex中的mutation类似于事件:每个mutation都有一个字符串的事件类型(type)和回调函数(handler)。这个回调函数就是实际进行状态更改的地方,并且他会接受一个state作为第一个参数。就像事件触发一样,不能直接调用mutation的回调函数,得将其唤醒,而唤醒handler的方式就是提交(commit)mutation。

const store = new Vuex.Store({
state: {
count: 1
},
mutations: {
increment (state) { //increment为
// 变更状态
state.count++
}
}
}) store.commit('increment'); //唤醒handler

提交载荷

你可以向store.commit方法中传入参数,即mutation的载荷。

//...
mutations: {
increment (state,n) {
state.count += n;
}
} store.commit("increment",10);

大多数情况下,载荷应该是一个对象,这样可以包含多个字段而且记录的mutation会更易读。

//...
mutations: {
increment (state,payload){
state.count += payload.amount;
}
} store.commit("increment",{amount:10});//mutation是同步事务。任何由increment导致的状态变更都应该在此刻完成。

因此为了进行异步操作,我引入了Action。

Action

Action类似Mutation,不同在于:1.Action提交的是mutation;mutation是直接变更store.state。2.Action可以包含任何异步操作。

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

Action函数接受一个与store实例具有相同方法和属性的context对象。

Module

Vuex了解的更多相关文章

  1. 关于Vue.js 2.0 的 Vuex 2.0,你需要更新的知识库

    应用结构 实际上,Vuex 在怎么组织你的代码结构上面没有任何限制,相反,它强制规定了一系列高级的原则: 应用级的状态集中放在 store 中. 改变状态的唯一方式是提交mutations,这是个同步 ...

  2. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  3. vuex 初体验

    vuex是vue的状态管理工具,vue进阶从es6和npm开始,es6推荐阮一峰大神的教程. vuex学习从官方文档和一个记忆小游戏开始.本着兴趣为先的原则,我先去试玩了一把-->. Vuex ...

  4. vuex(1.0版本写法)

    Vuex 是一个专门为 Vue.js 应用所设计的集中式状态管理架构. 官方文档:http://vuex.vuejs.org/zh-cn/  2.0和1.0都能在此找到 每一个 Vuex 应用的核心就 ...

  5. 关于Vue vuex vux 文档

    01. vue 链接 http://vuejs.org.cn/guide/ 02. vuex  ----->>状态管理模块儿<<------- https://vuex.vue ...

  6. vuex

    英文:(Introduction)中文:https://github.com/vuejs/vuex/issues/176(贡献者努力中)

  7. Vue 2.0 + Vue Router + Vuex

    用 Vue.js 2.x 与相配套的 Vue Router.Vuex 搭建了一个最基本的后台管理系统的骨架. 当然先要安装 node.js(包括了 npm).vue-cli 项目结构如图所示: ass ...

  8. Vue2.X的状态管理vuex记录

    记住上述的顺序情况:想要改变state,只能通过Mutation,虽然action可以直接改变state,这样会使每个状态可以方便的跟踪和记录(用Devtools跟踪) vue Method   -- ...

  9. 在vue1.0遇到vuex和v-model的坑

    事情是这样的,在开发项目的过程中我使用了vuex并且在store中定义了一个保存用户信息的对象 userInfo : { 'nickName' : '', // 昵称 'password' :'', ...

  10. vuex 笔记

    Vuex 笔记 一个简单的状态管理 单一数据源: const sourceOfTruth = {} const vmA = new Vue({ data: sourceOfTruth }) const ...

随机推荐

  1. 【FCS NOI2018】福建省冬摸鱼笔记 day4

    第四天. 动态规划专题,讲师:闫神 讲了一些DP优化技巧,然而思想难度好大啊……根本没想到能优化那地步,连DP方程都没有呢. 不过有几题我还是想明白了. 讲了单调队列,决策单调性,四边形不等式,斜率优 ...

  2. REX系统2

    REX(Real Time Executive)是一个面向嵌入式应用的,简单高效的,抢先式,多任务实时操作系统,支持基于优先级的任务调度算法(支持优先级反转).它提供了任务控制,任务同步,互斥,定时器 ...

  3. ASP .Net Core系统部署到SUSE 16 Linux Enterprise Server 12 SP2 64 具体方案

    .Net Core 部署到 SUSE 16 Linux Enterprise Server 12 SP2 64 位中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk ...

  4. 漂亮的SVG时钟

    漂亮的SVG时钟 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html lang="en"> <head> <m ...

  5. MySQL学习笔记:删除存储过程和函数

    删除存储过程.存储函数主要使用drop语句: drop procedure  —— 删除存储过程 drop function  —— 删除存储函数 语法: DROP {PROCEDURE|FUNCTI ...

  6. WDK10+VS2015 驱动环境搭建

    其实做驱动或者说底层安全的最大问题就是没有合适的资料去参考,网上很难找到想要的信息.比如搭建驱动环境我以前一直用的都是WDK7.1基于控制台去编译的,之前尝试过搭建WDK10+VS2015的组合环境, ...

  7. Struts 2 Overview

    Struts2 is popular and mature web application framework based on the MVC design pattern. Struts2 is ...

  8. HTML5练习2

    1.邮箱注册网页 主要代码: <!doctype html> <html> <meta charset="utf-8"> <title&g ...

  9. day7 socket网络编程

    Python Socket网络编程 Socket是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的 ...

  10. 安装loadrunner11,卸载360浏览器后提示“无效的应用程序路径!请检查应用程序是否存在!”

    我安装的loadrunner是11版本的,安装之前我的电脑上有安装了很多的浏览器,结果一开始录制脚本的时候,页面直接跳转到360浏览器上面了,但是显示正在录制的脚本为0个,于是就把360给卸载了,进行 ...