示例代码请访问我的GitHub: github.com/chencl1986/…

该节教程代码可通过npm start运行devServer,在http://localhost:8080/查看效果

Vuex简介

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

Vuex具有以下特点:

  1. 全局 Vuex类似于一个全局变量,它在整个Vue应用中生效。
  2. 统一 只要状态修改,都会自动通知到所有相关组件,不需要使用者主动推送。
  3. 单一 在全局中只需要保存一份,即可在全局中使用。

Vuex解决了哪些问题:

  1. 数据跨组件共享,数据的传输不再受到父子级限制,可以在各级组件中任意获取。
  2. 防止数据被意外篡改,Vuex会记录数据被修改的详细信息,如修改状态的组件、时间、代码位置等,便于定位和追踪错误,同时也方便了调试和测试。

Vuex的状态管理示意图详解

Vuex的使用

代码示例:/lesson20/src/main.js

先使用vue-cli创建一个项目,之后使用npm install vuex --save安装Vuex,就可以在/src/main.js中配置Vuex:

// 1. vuex-引入
import Vuex from 'vuex'// vue-cli自带的编译配置
Vue.config.productionTip = false// 1. vuex-在Vue中使用Vuex,让Vuex中的操作挂载到Vue中。
Vue.use(Vuex)// 3. vuex-声明store对象
const store = new Vuex.Store({strict: process.env.NODE_ENV !== 'production', // 严格模式:防止直接修改state,只能用Mutations操作,由于strict模式是通过对象深度匹配进行,生产模式打开会严重影响性能。state: {a: 12, b: 5}, // 核心:数据mutations: { // 定义Mutations},actions: { // 定义actions},getters: {}, // 类似于computedmodules: {} // 将store拆分成多个命名空间,分开使用。
})/* eslint-disable no-new */
new Vue({el: '#app',router,store, // 将store挂载到Vue实例中。components: { App },template: '<App/>'
})
复制代码

读取state的值

代码示例:/src/components/Index.vue

在Index.vue中可以通过$store.state.a读取到已定义的a的值。

<template><div><!-- 读取Vuex的state -->a: {{$store.state.a}}<Cmp1/><Table :fields="fields" :datas="datas" :parent="this"/></div>
</template>
复制代码

修改state的值

接下来实现在Cmp1.vue组件中,点击按钮后修改state中的a的值。

代码示例:/src/components/Cmp1.vue

<template lang="html"><div class=""><input type="button" value="+5" @click="fn()"></div>
</template><script>
export default {name: 'cmp1',methods: {fn(){// this.$store.state.a+=5; // 在严格模式下,直接修改state可以成功,但会报错// this.$store.commit('add', 5);  // 直接触发一个Mutation其实也可行,且不会报错,但这其实违背了Vuex设计的初衷。this.$store.dispatch('add', 5);  // 触发一个action,实现数据修改。}}
}
</script><style lang="css" scoped>
</style>
复制代码

在main.js中定义Actions和Mutations。

代码示例:/lesson20/src/main.js

const store = new Vuex.Store({strict: process.env.NODE_ENV !== 'production', // 严格模式:防止直接修改state,只能用Mutations操作,由于strict模式是通过对象深度匹配进行,生产模式打开会严重影响性能。state: {a: 12, b: 5}, // 核心:数据mutations: { // 定义Mutations,通过action触发并更新state,Vue Devtool可以监听到数据的修改情况。add (state, n) { // 第一个参数为旧state,第二个参数为action中commit传入的参数。state.a += n}},actions: { // 定义actions,actions被触发后,将数据提交给Mutations进行处理并更新state。add ({ commit }, n) { // 第一个参数为context对象,它不是store本身,可以通过context.commit提交一个Mutation。第二个参数为用于更新state的参数。commit('add', n)}},getters: {}, // 类似于computedmodules: {} // 将store拆分成多个命名空间,分开使用。
})
复制代码

Vue教程20:Vuex入门相关推荐

  1. vue教程——13 Vuex

    vue教程--13 Vuex 一 什么是Vuex? 二 vuex核心组成模块 三 vuex初体验 四 getter用法----------怎么获取state中的值呢?(B组件怎么获取并监听state的 ...

  2. Go 系列教程 —— 20. 并发入门

    欢迎来到我们 Golang 系列教程的第 20 篇. Go 是并发式语言,而不是并行式语言.在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别. 并发是什么? 并发是指立即处理 ...

  3. Vue教程|vue3.0入门到精通,持续更新

    文章目录 01 Vue的基本概念 概念 Vue特点 搭建Vue开发环境 容器和实例是一一对应的 02 模板语法 03 数据绑定 04 el的两种写法 data的两种写法 对象式:在new Vue()对 ...

  4. 视频教程-德国Vue.js2终极开发教程(含Vue路由和Vuex)-Vue

    德国Vue.js2终极开发教程(含Vue路由和Vuex) * Academind GmbH创始人,当前生活在德国慕尼黑 * 从15岁开始进入开发领域,前后端技术均很精通,毕业于慕尼黑大学硕士学位 * ...

  5. 德国Vue.js2终极开发教程(含Vue路由和Vuex)-Max-专题视频课程

    德国Vue.js2终极开发教程(含Vue路由和Vuex)-808人已学习 课程介绍         新手入门现代前端开发的不二选择 课程目标: * 学会从简单到复杂企业级应用的VueJS程序编写方法 ...

  6. 视频教程-20年Nodejs教程零基础入门到项目实战前端视频教程-Node.js

    20年Nodejs教程零基础入门到项目实战前端视频教程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务 ...

  7. 视频教程-全套Photoshop教程+20个基础技巧课程+海报排版案例(入门版)-Photoshop

    全套Photoshop教程+20个基础技巧课程+海报排版案例(入门版) 中国电商服务联盟品牌讲师.中国国际互联网节品牌顾问. 12年视觉设计经验,5年视觉讲师经验.电商品牌视觉策划讲师 .曾任知名电商 ...

  8. Vue/Vuex入门、Vuex 介绍 Vuex是什么 Vuex说明总结、Vuex主要五个内容

    一.Vuex说明 1.Vuex介绍 Vuex是Vue的状态管理工具 状态是数据 状态管理就是集中管理Vue中通用的一些数据 2.Vuex是什么? Vuex的作用是解决多组件状态共享的问题 在大型项目中 ...

  9. Vue项目构建开发入门

    Vue项目构建开发入门 开篇:Vue CLI 3 项目构建基础 大家好,当你点进这个标题,开始阅读本章的时候,说明你对 Vue.js 是充满好奇心和求知欲的.我之前写过一篇文章,这样评价 Vue.js ...

  10. 2017 Vue.js 2快速入门指南

    注意,据部分读者反映本文水多,怕湿身者勿进.后续推荐详解 Vue & Vuex 实践 2017 Vue.js 2快速入门指南翻译自Vue.js 2 Quickstart Tutorial 20 ...

最新文章

  1. Redis、Kafka 和 Pulsar 消息队列对比,写得太好了!
  2. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(1)...
  3. 第三方服务整合-阿里云OSS上传文件-填坑
  4. 荣耀手表2鸿蒙,鸿蒙2.0曝光 计划在明年用于手表手环上
  5. Linux下安装zookeeper集群(奇数个)
  6. 内存淘汰机制 LRU cache
  7. TCP通信过程大讨论
  8. 计算机所涉及的英语,计算机算法相关术语的英语词汇
  9. 机器学习中的范数规则化之L21范数
  10. arcgis分隔图层重复出文件_【干货】ArcGIS不可或缺的制图技巧,处理好细节才能让图更专业!...
  11. C#获取IP和整数IP方法
  12. 【路径规划】基于matlab遗传算法求解多式联运运输问题【含Matlab源码 877期】
  13. 如何安装xvidcore
  14. 如何在线免费获取RStudio Conference 2020研讨会资料
  15. 属于计算机网络硬件系统有哪些,下列不属于计算机硬件系统的是()
  16. shopnc linux im安装教程,shopnc编译安装IM服务器node.js
  17. SpringSecurity实现数据库认证
  18. 计算机辅助设计表现的发展给设计带来的影响,计算机辅助设计对艺术设计的影响.doc...
  19. Splay Tree伸展树
  20. 团队作业(三):项目分工

热门文章

  1. 查看-增强会话_会话助手平台-Hinglish Voice等!
  2. php当前工作目录路径,Linux_Linux下使用Shell脚本改变当前工作路径,       She - phpStudy...
  3. 例2.7 输出梯形 - 九度教程第14题(排版题)
  4. ResNet网络理解
  5. 浙江省高考计算机重点知识,2017届浙江省新高考信息技术考试标准
  6. php转换emoji表情为图片输出小程序,微信小程序中使用emoji表情相关
  7. php html5 应用缓存,HTML5 应用程序缓存
  8. c++ vector、stack、queue、map用法总结
  9. topcoder srm 440 div1
  10. 一定能成功的Android NDK环境配置教程