Vuex简介

概念:

专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中管理(读、写),也是一种适用于任意组件间的通信方式。

什么时候用Vuex

①多个组件依赖于同一状态

②来自不同组件的行为需要变更为同一状态

Vuex工作原理

组件在不需要ajax请求后端参数的时候,可以直接通过commit到Mutations而不通过Action

即通过Dispatcher和actions对话,commit和mutation对话

搭建Vuex工作环境

安装vuex
  1. npm i vuex@3
使用vuex插件

main.js

  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import ElementUI from 'element-ui'
  4. import 'element-ui/lib/theme-chalk/index.css'
  5. import VueRouter from 'vue-router'
  6. import router from './router'
  7. import store from './store'
  8. Vue.config.productionTip = false
  9. Vue.use(ElementUI)
  10. Vue.use(VueRouter)
  11. const vm = new Vue({
  12. render: h => h(App),
  13. router: router,
  14. // 安装全局事件总线
  15. beforeCreate() {
  16. Vue.prototype.bus = this
  17. },
  18. store
  19. }).$mount('#app')
  20. console.log(vm)

/store/index.js

  1. import vuex from 'vuex'
  2. import vue from 'vue'
  3. vue.use(vuex)
  4. const actions = {}
  5. const mutation = {}
  6. const state = {}
  7. export default new vuex.Store(
  8. actions,
  9. mutation,
  10. state
  11. )

vue.use(vuex)不能写在main.js中,因为脚手架解析main.js时会先解析import store再解析vue.use(vuex),导致store/index.js的new vuex.Store不能用

Vuex的使用

组件

  1. <template>
  2. <div>
  3. <h2>Sum:{{$store.state.sum}}</h2><br/>
  4. <select v-model="value">
  5. <option :value="1">1</option>
  6. <option :value="2">2</option>
  7. <option :value="3">3</option>
  8. </select>
  9. <button @click="increase">+</button>
  10. <button @click="decrease">-</button>
  11. <button @click="increaseOdd">odd +</button>
  12. <button @click="increaseWait">wait +</button>
  13. </div>
  14. </template>
  15. <script>
  16. export default {
  17. data() {
  18. return {
  19. value: 1
  20. }
  21. },
  22. methods: {
  23. increase() {
  24. this.$store.commit('INCREASE', this.value)
  25. },
  26. decrease() {
  27. this.$store.commit('DECREASE', this.value)
  28. },
  29. increaseOdd() {
  30. this.$store.dispatch('increaseOdd', this.value)
  31. },
  32. increaseWait() {
  33. this.$store.dispatch('increaseWait', this.value)
  34. }
  35. },
  36. }
  37. </script>
  38. <style>
  39. </style>

store\index.js

  1. import vuex from 'vuex'
  2. import vue from 'vue'
  3. vue.use(vuex)
  4. const actions = {
  5. increaseOdd(context, value) {
  6. if(context.state % 2)
  7. context.commit('INCREASE', value)
  8. },
  9. increaseWait(context, value) {
  10. setTimeout(()=>{
  11. context.commit('INCREASE', value)
  12. },500)
  13. }
  14. }
  15. const mutations = {
  16. INCREASE(state, value) {
  17. state.sum += value
  18. },
  19. DECREASE(state, value) {
  20. state.sum -= value
  21. }
  22. }
  23. const state = {
  24. sum: 0
  25. }
  26. export default new vuex.Store({
  27. actions,
  28. mutations,
  29. state
  30. })

【Vue】Vuex的更多相关文章

  1. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...

  2. 【vue】移动端demo资料

    http://imzjh.com/inew/#/(移动端demo) https://github.com/liangxiaojuan/eleme(饿了么git地址) https://github.co ...

  3. 【vue】MongoDB+Nodejs+express+Vue后台管理项目Demo

    ¶项目分析 一个完整的网站服务架构,包括:   1.web frame ---这里应用express框架   2.web server ---这里应用nodejs   3.Database ---这里 ...

  4. 【vue】本地开发mock数据支持

    项目离不开数据渲染的支持,为本地开发配置 数据  支持. (一)方式一:安装JSON Server搭建mock数据的服务器 json Server 是一个创建 伪RESTful服务器的工具. 配置流程 ...

  5. 【vue】npm run mock & npm run dev 无法同时运行的解决

    [关于系统,没注明的都是windows系统,若以后用的是mac系统则会另外备注] 当项目数据是通过mock搭建而成(参照:[vue]本地开发mock数据支持)时,运行mock服务器和项目的命令 就参照 ...

  6. 【VUE】自定义组件

    [VUE]自定义组件 转载: ============================================ ======================================== ...

  7. 【VUE】使用问题记录

    [VUE]使用问题记录 ===================================================================== 1.Vue.nextTick 修改数 ...

  8. 【VUE】数组

    [VUE]常用函数 转载:https://www.cnblogs.com/yangchongxing/p/10637087.html 目录 ============================== ...

  9. 【vue】生成接口模拟数据

    目录 方案一:自定义模拟数据 Step1 创建json文件 Step2 在 vue.config.js 中配置 Step3 在组件中使用 (方式一) Step3 封装api (方式二) Step4 在 ...

  10. 【vue】vue +element 搭建项目,vuex中的store使用

    概述: 每一个 Vuex 应用的核心就是 store(仓库).“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state).Vuex 和单纯的全局对象有以下两点不同: Vuex 的 ...

随机推荐

  1. 05 HDFS Java API应用实例

    一.在Ubuntu系统中安装和配置Eclipse 二.利用hadoop 的java api,向HDFS写一个文件. 三.从HDFS读取一个文件的内容.

  2. awk统计命令

    求和 cat file|awk '{sum+=$1} END {print "Sum = ", sum}' cat file|awk '{sum[$1]+=$2}END{for(c ...

  3. PRVF-4007 : User equivalence check failed for user "grid"

    PRVF-4007 : User equivalence check failed for user "grid" 问题:Oracle安装Grid Infrastructure之前 ...

  4. Eclipse离线安装svn插件下载

    site-1.4.8.zip site-1.6.18.zip site-1.8.22.zip site-1.10.9.zip site-1.10.13-1.9.x.zip site-1.10.13-1 ...

  5. Python笔记(3)——列表二:操作列表(Python编程:从入门到实践)

    一.遍历列表 1. 遍历整个列表:使用for循环 1 colors=['red','yellow','blue','green'] #定义列表 2 for color in colors: #使用循环 ...

  6. logrotate 切割Tomcat的catalina.out文件

    使用logrotate进行切割.   在/etc/logrotate.d下,新建tomcatrotate,编辑tomatrotate,写入如下内容:    /usr/local/tomcat/logs ...

  7. CentOS7 使用Mariadb 安装 hive

    前提:已成功安装hadoop ──────────1. MariaDB安装 ──────────第一步 参照以下内容安装MariaDBhttps://www.linuxprobe.com/chapte ...

  8. RPC方式调用远程webservice接口

    /** * 可调整调用方法与命名空间的请求 * @param wsMethod 方法名 * @param bodyMessage json请求体.toString() * @return JSONOb ...

  9. java获取类内容

    java获取类内容 Book类 public class Book implements Serializable { private int id; private String name; pri ...

  10. spring下的restTemplate使用

    首先上配置,由于restTemplate不支持一些返回格式,所以需要自己手动配置 /** * @Description : restTemplate配置类 * @Author : wzkris * @ ...