• Action 类似于 mutation,不同在于:

    1.Action 提交的是 mutation,而不是直接变更状态。

    2.Action 可以包含任意异步操作。

  • mutation是同步的,当需要异步操作的时候,就需要dispatch一个action。

  • Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。

 actions: {
  increment (context) {
   context.commit('increment')
  }
 }

实践中,我们会经常用到 ES2015 的 参数解构 来简化代码(特别是我们需要调用 commit 很多次的时候):

等价于上面的代码。

 actions: {
  increment ({ commit }) {
   commit('increment')
  }
 }
  • 问:页面触发action进行请求,发现vuex state中的状态确实发生了变化,但是页面需要刷新才能渲染列表?

    答:我想到的解决方法:1.判断state的对应状态有值后,进行相应操作;2.用computed或watch,如果值变化,进行相应操作。

  • namespaced: true 配置的作用:

    通过 [文件名]/[value] 的方式访问值,而不用挂载到全局namespace。

export const myModule = {
// This makes your getters, mutations, and actions accessed by, eg: 'myModule/myModularizedNumber' instead of mounting getters,
// mutations, and actions to the root namespace.
namespaced: true,
state: {
myModularizedNumber: 0
},
getters: {
myModularizedNumber: state => state.myModularizedNumber
},
mutations: {
setModularizedNumber(state, newNumber) {
state.myModularizedNumber = newNumber
}
}
}
  • 修改store里别的module中值的方法:

    1.在要修改值的module中,写一个mutation;

    2.在vue组件中触发的话,语句如下:
this.$store.commit('[module_name]/[mutation]')
  • store中的值,在mutations中才能修改。

  • 从store中取时间,并做倒计时显示在页面上:

  1. data中定义要在页面上显示的数据:time
    data () {
return {
time: ''
}
},
  1. computed中定义数据的处理:
    computed: {
modifyTime () {
if (this.user !== null) {
return this.countDown(this.user.platform.modifyTime)
}
return ''
}
  1. methods中定义处理数据的函数:
    methods: {
countDown (time) { },
  • state作为store的唯一数据源而存在,在组件里可以使用this.$store.state来获取,但是这个数据是只读的,无法直接通过给this.$store.state赋值来达到赋值的效果。这时就轮到mutation出场了。

    mutation是唯一能更改store中的状态(state)的方法,这个相当于事件,每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。

  • 在 Vue.js devtools 中,mutations有type、payload 两个值。

  • vuex管理的是组件的状态,用getters可以让一个组件获取多个store中的states。

  • 访问vuex中的数据和方法:

    this.$store.state.数据名

    this.$store.getters.方法名

  • mapGetters 辅助函数(...mapGetters)仅仅是将 store 中的 getters 映射到局部计算属性,其实也就是从 getters 中获取对应的属性,跟解构类似。

  • 如果所有计算属性的名称都与 state 一致,可以在 mapState 中以数组的方式进行映射。如果 Vue 中已经存在计算属性,可以通过 ES6 的展开操作符 (...) 进行组合。

  • 获取store中数据的2种方式(因为store的数据有可能还不存在,所以需要判断下):

    1.在computed中获取

    2.在watch中获取

  • 获取vuex组件store中值的2种方式:

    1.组件computed中获取store中的值(推荐)

    computed: {
show: function () {
return this.user !== null
},
form: function () {
if (this.show === true) {
let obj = _.cloneDeep(this.user) // 深拷贝一份state数据
// 对obj的数据进行处理,便于显示
return obj
}
return null
},
...mapState({
user: state => state.user.auth
})
},

2.组件template中获取store中的值:

{{ $store.state.user.auth.nick | emptyFilter }}
:src=" $store.state.user.auth.icon "
  • vuex中的modules:

    可以在一个module下,再新建一个module

  • methods中自己定义的函数名,不要和methods中...mapActions({})中的函数同名;

    如果同名的话,vue不知道该执行哪个。

  • 使用如下语句引入modules时,必须在此文件夹的index.js中引入各module对应的js文件。

import * as modules from './modules'

vuex 知识点的更多相关文章

  1. vuex知识笔记,及与localStorage和sessionStorage的区别

    菜单快捷导航 Vuex是什么东东,有什么应用场景?localStorage和sessionStorage能否替代它? Vuex知识点State.Getter.Mutaion.Action Vuex模块 ...

  2. vuex的实用知识点

    本文系统介绍vuex的全部内容 为什么用vuex 组件通信知道吧,相信很多同学,刚学的时候很难懂,实时上在实际应用中,大型项目如果使用最原始的组件通信会非常的麻烦,主要体现在多层嵌套的组件之间的通信, ...

  3. vuex相关知识点

    vuex简单理解转载博客 vuex从入门到入门------state:从 store 实例中读取状态最简单的方法就是在计算属性中返回某个状态------Getters:可以很容易地在任何组件中使用它- ...

  4. vueX基础知识点笔记

    vuex是专门用来管理vue.js应用程序中状态的一个插件.他的作用是将应用中的所有状态都放在一起, 集中式来管理.需要声明的是,这里所说的状态指的是vue组件中data里面的属性.简单的来说, 它就 ...

  5. 19.Vuex详细使用说明-一篇文章涵盖所有知识点

    vuex官网: https://vuex.vuejs.org/zh/ 一. 前言 不管是Vue,还是 React,都需要管理状态(state),比如组件之间都有共享状态的需要. 什么是共享状态? 比如 ...

  6. use vue vuex vue-router, not use webpack

    vue,vuex,vue-router放在一起能做什么?不用webpack之类的打包工具使用他们是否可行?各位道友在初学vue时是否有这样的困惑.因为现代构建前端项目的一般模式是: 安装webapck ...

  7. 基于vue2.0+vuex+localStorage开发的本地记事本

    本文采用vue2.0+vuex+localStorage+sass+webpack,实现一个本地存储的记事本.兼容PC端和移动端.在线预览地址:DEMO github地址:https://github ...

  8. Vuejs技术栈知识点小结

    前言 上家公司的项目主要是使用jQuery和Angular1,然后自己学了React,没想到来到这家公司突然开始做vue,不过vue还是挺容易上手的.下面是vue技术栈的一些总结,都是来自官网,主要是 ...

  9. 从壹开始前后端分离 [ vue + .netcore 补程 ] 三十一║ Nuxt终篇:基于Vuex的权限验证探究

    缘起 哈喽大家好,今天周四啦,楼主明天要正式放假了,这里先祝大家节日快乐咯,希望在家里能继续研究点儿东西吧,今天呢是 nuxt 的最后一篇,主要是对权限登录进行研究,这一块咱们之前在说第一个项目的时候 ...

随机推荐

  1. hihoCoder-1087 Hamiltonian Cycle (记忆化搜索)

    描述 Given a directed graph containing n vertice (numbered from 1 to n) and m edges. Can you tell us h ...

  2. spring PROPAGATION

    PROPAGATION_REQUIRED Support a current transaction; create a new one if none exists.  支持一个当前事务;如果不存在 ...

  3. SQL Server 创建定时任务JOB

    1.    SQL Server 代理  → 作业(右键)→新建作业 2.在[常规]中输入 “名称” 并确认已勾选 “已启动”. 3.在[步骤]中 "新建步骤": 填写 “步骤名称 ...

  4. oracle11g中SQL优化(SQL TUNING)新特性之Adaptive Cursor Sharing (ACS)

    1.   ACS简介 Oracle Database 11g提供了Adaptive Cursor Sharing (ACS)功能,以克服以往不该共享的游标被共享的可能性.ACS使用两个新指标:sens ...

  5. kettle 发邮件带附件

    新建一个job,主要用到的组件有两个,如下图: 首先点击下图的文件,选择你要做为邮件附件的文件.选完后会在前辈的文件.目录中显示.然后点击增加,会下面文件列表中显示已经添加的文件(涂黄色的部分) 按下 ...

  6. Java——IO类,转换流简化写法

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  7. LUN挂载到Linux主机后,如何对磁盘进行分区

    将阵列上的LUN挂载到Linux主机后,如何对磁盘进行分区,方法参考https://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-104-1/ fdis ...

  8. python3 线性同余发生器 ( random 随机数生成器 ) 伪随机数产生周期的一些探究

    import random x=[str(random.randint(0, 5)) for i in range(10)] x_str=''.join(x) y=[str(random.randin ...

  9. Ubuntu16.04 和 hadoop2.7.3环境下 hive2.1.1安装部署

    参考文献: http://blog.csdn.NET/reesun/article/details/8556078 http://blog.csdn.Net/zhongguozhichuang/art ...

  10. 【opencv基础】测量运行时间的函数getTickCount/getCPUTickCount/getTickFrequency

    函数的计算结果类型是double,单位是秒. 要使用更精确的计时,就需要使用getCPUTickCount(),不过现代计算机CPU的频率会随着负载而变化所以没大有必要使用该函数,可以参看函数的介绍[ ...