最近一直工作比较忙,博客已经鸽了好久了,趁着今天是周末,写点东西吧

使用vuex来管理数据

  • 最近一直在用vue做项目,但是却从来没真正去用过vuex,因为一直感觉很复杂,其实真正去研究一下啊,就会发现很容易。

vuex中,有默认的五种基本的对象:

  • state:存储状态(变量)
  • getters:对数据获取之前的再次编译,可以理解为state的计算属性。我们在组件中使用 $sotre.getters.fun()
  • mutations:修改状态,并且是同步的。在组件中使用$store.commit('',params)。这个和我们组件中的自定义事件类似。
  • actions:异步操作。在组件中使用是$store.dispath('')
  • modules:store的子模块,为了开发大型项目,方便状态管理而使用的。这里我们就不解释了,用起来和上面的一样。

怎么引用这里就不介绍了,如果使用的是3.0cli,在创建项目的时候,选择安装vuex模块,会自动配置好store.js,很方便

定义变量

  • 在store.js中,你会发现有我上面提到的那些对象,这里随便定义个变量。

和页面中在data写变量差不多。

使用变量

  • 就和正常的变量使用是一样的,只不过前面是$store
  • {{$store.state.count}}
  • 到这一步你就已经会了一小半了,很简单的吧?

回想一下,我们只需要在下载安装使用vuex,在我们定义的store.js中定义state对象,并且暴露出去。

在main.js中使用我们的store.js(这里是为了防止在各个组件中引用,因为main.js中,有我们的new Vue 实例啊!)

现在我们已经使用了vuex中的state,接下来我们如何操作这个值呢? 没错!用mutations和actions

我们继续操作store.js文件


我们在sotre.js中定义mutations对象,该对象中有两个方法,mutations里面的参数,第一个默认为state,接下来的为自定义参数。

  // 其实说白了就是通过其他页面的方法来调用这里的方法,所以这里要写对数据的操作,会直接同步到state
mutations: {
add(state, n) {
state.xone = state.xone + n
},
remove(state, n) {
if (state.xone > 0) {
state.xone = state.xone - n
} else {
state.xone = 0
}
}
},

然后我们在页面中,使用这个方法

methods: {
add (n) {
// 首先,通过这个向vuex传一个函数,括号内的就是函数名,传到了actions里面。这个是异步更新的
this.$store.dispatch('addFun', n)
// 如果要直接修改state的值可以用下面这个,但是官方不推荐,这个是同步更新的
// this.$store.commit('add', n)
},
remove (n) {
// this.$store.commit('remove', n)
this.$store.dispatch('removeFun', n)
}
},
  • 当然了,这个n参数也是可以不传的,如果你需要一些计算的话,就传上

然后打开浏览器试一下吧,我们可以看到每当触发事件时,我们都可以在vue开发工具中看到我们触发的mutations方法,以及参数

完美!


接下来就是actions,actions是异步操作

创建actions对象,并且使用

actions: {
// 调用mutations的add方法,这个addFun是从其他页面定义的方法,mutations则是接参数,这个参数对应上面的mutations,
addFun(mutations, n) {
// 这个commit可以理解为调用上面的某个方法
mutations.commit('add', n)
},
// 调用上面的remove方法 removeFun(mutations, n) {
mutations.commit('remove', n)
}
}

getters它算是state的一个计算属性,目前还没怎么用过,以后补充

使用vuex来管理数据的更多相关文章

  1. vuex状态管理-数据改变不刷新

    困惑: 在页面初始化的时候,我提交到vuex状态管理,然后在获取的时候获取不到,我找到了出错的地点,并进行了修改,然后可以获取到状态 但是不知道原因? 定义了如下的state const state ...

  2. Electron-vue实战(三)— 如何在Vuex中管理Mock数据

    Electron-vue实战(三)— 如何在Vuex中管理Mock数据 作者:狐狸家的鱼 本文链接:Vuex管理Mock数据 GitHub:sueRimn 在vuex中管理mock数据 关于vuex的 ...

  3. Vuex异步请求数据通过computed计算属性值

    问题描述: 使用Vuex管理数据时,在组件内使用$emit分发事件后,获取回来的数据要自动更新到该组件内,需要使用computed来计算更新. 一开始尝试使用赋值给data的方法,后来发现重新发起aj ...

  4. vuex状态管理之学习笔记

    概述及使用场景 Vuex 是一个主要应用在中大型单页应用的类似于 Flux 的数据管理架构.它主要帮我们更好地组织代码,以及把应用内的的状态保持在可维护.可理解的状态. 但如果是简单的应用 ,就没有必 ...

  5. vuex数据管理-数据模块化

    对于vue这类mvvm框架来说,其核心就是组件与数据,因此做好相应的数据管理极为重要.这里分享下vuex数据模块化管理的方法,有利于搭建便于维护.协作的vue项目. vuex管理基本方法和使用 模块化 ...

  6. Vuex状态管理详解

    什么是Vuex 专门为vue应用程序开发的状态管理模式,采用集中式存储管理应用的所有组件的状态(数据),以相应的规则保证状态以一种可预测的方式发生改变 Vuex的作用(什么样的情况下使用Vuex) 多 ...

  7. vuex状态管理demo

    vuex状态管理主要包含四个概念  mapState,mapMutations,mapGetters,mapActions. 编写vuex文件夹下面的store.js import Vue from ...

  8. 前端Vue框架-vuex状态管理详解

    新人报道!多多关照-多提宝贵意见 谢谢- vuex理解 采用集中式存储管理模式.用来管理组件的状态,并以自定义规则去观测实时监听值得变化. 状态模式管理理解 属性 理解 state 驱动应用的数据源 ...

  9. 前端技术之:如何在vuex状态管理action异步调用结束后执行UI中的方法

    一.问题的起源 最近在做vue.js项目时,遇到了vuex状态管理action与vue.js方法互相通信.互操作的问题.场景如下图所示: 二.第一种解决方法 例如,我们在页面初始化的时候,需要从服务端 ...

随机推荐

  1. 时间模块(import time)

    时间戳时间: float数据类型,给机器用的 print(time.time()) =>1533713657.5423343 结构化时间: 上下两种格式的中间状态 能够通过属性名来获取对象中的值 ...

  2. UE4碰撞规则详解

    UE4的碰撞设置在官方的文档的 物理模拟模块(链接:点击打开链接).但是操作起来感觉坑还是比较多,所以这里总结一下,以防平时经常会漏掉或忽略某些条件.如果想看关于碰撞响应触发,可以参考链接( UE4蓝 ...

  3. Directx11教程(56) 建立一个skydome

    原文:Directx11教程(56) 建立一个skydome       本章建立一个skydome(天空穹),主要学习如何使用cube mapping.      cube map就是把六张纹理当作 ...

  4. 使用vscode书写markdown文件

    插件推荐 markdown-preview-enhanced 打开 vscode 编辑器,在插件页搜索 markdown-preview-enhanced,接着点击 Install 按钮. 该插件的中 ...

  5. Black-White-Blocks

    微信小程序黑白块游戏 代码如下: //play.js // play var app = getApp() Page({ data: { typeName: '计时模式', score: 0, tim ...

  6. nodeJs学习-09 模板引擎 jade、ejs

    模板引擎: jade -破坏式.侵入式,强依赖:用了之后不能随便用别的引擎 ejs - 温和.非侵入时.弱依赖 jade使用 const jade = require('jade'); var str ...

  7. 洛谷 P3768 简单的数学题 (莫比乌斯反演)

    题意:求$(\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j))mod p$(p为质数,n<=1e10) 很显然,推式子. $\sum_{i=1}^{n}\sum_{j ...

  8. iOS:学习runtime的理解和心得

    http://www.cocoachina.com/ios/20150901/13173.html 作者:兴宇是谁 授权本站转载. Runtime是想要做好iOS开发,或者说是真正的深刻的掌握OC这门 ...

  9. 设置WPF窗口相对于非WPF窗口的位置

    原文:设置WPF窗口相对于非WPF窗口的位置 在前一个Post当中,指出了在WPF的WindowInteropHelper类中的一个BUG:通过WindowInteropHelper的Owner属性不 ...

  10. @codeforces - 793G@ Oleg and chess

    目录 @description - translation@ @solution@ @part - 1@ @part - 2@ @part - 3@ @part - 4@ @accepted code ...