vuex 第一篇

目录

  • vuex概念
  • state / mapState
  • getter / mapGetter
  • mutation / mapMutation
  • action / mapAction
  • module / 命名空间 / 动态注册和卸载模块
  • vuex的插件plugin开发
  • vuex的项目结构组织
  • 严格模式 及 严格模式下的表单v-model的处理
  • vuex的测试
  • vuex的热重载

vuex 概念

在前面总结过组件间通信的几种方式,都有相应的适用的场景。在大型项目中,当组件树层级越来越多,组件间的通信也就越来越麻烦和复杂,特别当多个组件依赖于某些共同的数据,或者不同的组件需要能变更某一个数据时,还要保持状态的响应式的情形下,我们不得不考虑采取一种更好的方式去组织代码。

因此,我们考虑把组件所有共享的数据抽取出来,以一个全局单例的模式统一管理,我们要实现,在这种组织方式下,不管组件树的哪个节点,都能获取数据或者改变数据,并且依赖此数据的其它组件也能即时获取改变后最新的数据。把这些组件依赖的数据作为状态量进行统一管理,这就是状态管理。

在状态管理中,我们需要定义一些统一的概念和约定一些强制性的规则来方便管理,以此实现状态的改变可被追踪和可被预测。

这就是vuex产生的背后思想,它是专门为vue设计的状态管理库,充分复用了vue的数据响应机制来使得状态的改变也是响应式的。多个依赖于同一状态的组件,其中任何一个组件改变了某个依赖状态,其它组件也会也会相应地得到高效的更新。

vuex中,我们定义了如下几个概念和约定规则:

  • state: 存放整个应用共享的状态(数据源);
  • getter: 当多个组件对获取同一个state需要进行计算或转换成合适可用的状态时,对共同转换逻辑的抽离,类似计算属性
  • mutation: 同步变更某个状态量的唯一方法;
  • action: 组件中需要异步触发某一状态量改变,此时派发一个aciton,触发管理这个状态量的mutation来变更这个状态量。
  • module: 当项目状态管理更为复杂时,可以根据项目结构定义多个模块,每个模块都有自己的state/getter/mutation/action。为了多个模块或模块与全局仓库的隔离,可以对模块进行命名,形成模块的命名空间,具有命名空间的模块依然可以获取全局状态,在逻辑中也可以动态注册模块。
  • store: 以上这些状态和方法都定义在store中,类似一个仓库,存放数据源,以及获取和变更数据的方法。一个vue实例全局只能有一个store。store对象就相当一个vuex的实例对象。

vuex 使用

  1. // 1. 引入vue 和 vuex
  2. import Vue from 'vue'
  3. import Vuex from 'vuex'
  4. // 2. 在vue中注册vuex插件
  5. Vue.use(Vuex)
  6. // 3. 实例化一个管理状态的仓库store
  7. const store = new Vuex.Store({
  8. state:{},
  9. getters: {},
  10. mutations: {},
  11. actions: {},
  12. modules: {}
  13. })
  14. // 4. 将store 全局注入到vue实例
  15. const app = new Vue({
  16. el: "#app",
  17. // 把 store 对象提供给 “store” 选项,这样就可以把 store 的实例注入所有的子组件
  18. store,
  19. // 其它代码...
  20. })
  21. // 5. 组件中使用 this.$store
  22. const Counter = {
  23. template: `<div>{{ count }}</div>`,
  24. computed: {
  25. count () {
  26. return this.$store.state.count
  27. }
  28. }
  29. }

总结下约定的规则,简单的说就是:commit mutation,dispatch action

vue-learning:40 - Vuex - 第一篇:概念和基本使用的更多相关文章

  1. vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录

    一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...

  2. HTTP/2探索第一篇——概念

    版权声明:本文由张浩然原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/87 来源:腾云阁 https://www.qclou ...

  3. Vue学习之路第一篇(学习准备)

    1.开发工具的选择 这个和个人的开发习惯有关,并不做强求,厉害的话用记事本也可以.但是我还是建议用人气比较高的编辑工具,毕竟功能比较全面,开发起来效率比较高. 我之前写前端一直用的是sublimete ...

  4. vue学习指南:第一篇 - vue的介绍

    三大主流框架: 1. Vue.js 是目前最火的一个前端框架,react是最流行的前端框架 (react除了开发网站,还可以开发手机app,Vue语法也是可以用于手机App开发的,需要借助于wexx) ...

  5. storm第一篇--概念,例子,参数优化

    1 概念 目前最新的0.8.0版本里面 worker -> 进程.一个worker只能执行同一个spout/bolt的task,一个worker里面可以有多个executor. executor ...

  6. vue.js学习系列-第一篇(代码)

    <html> <head> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"> ...

  7. vue.js学习系列-第一篇

    VUE系列一 简介    vue是一个兴起的前端js库,是一个精简的MVVM.从技术角度讲,Vue.js专注于 MVVM 模型的 ViewModel 层.它通过双向数据绑定把 View 层和 Mode ...

  8. Vue.js学习笔记 第一篇 数据绑定

    双花括号文本插值 先来个最简单的例子,看完之后立马会用Vue了,是不是很有成就感 <!DOCTYPE html> <html> <head> <meta ch ...

  9. AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX

    AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX 一.什么是JSX 使用JSX声明一个变量(REACT当中的元素): const element =< ...

随机推荐

  1. Python中的进程池与线程池

    引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用submit异步调用 异步+回调函数 ...

  2. 学习python所需要了解的一些基础计算机知识汇总

    1)编程语言 语言是一个物体与另一个物体交流的介质,而编程语言就是程序员与计算机沟通的介质,人使用编程语言的目的就是控制计算机为人服务. 例如,用户使用用python语言编写的应用程序通过操作系统向C ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...

  4. Word画线条5大技巧,简单实用!

    [Word画线条5大技巧,简单实用!]1.输入三个“=”,回车,就是一条双直线:2.输入三个“~”,回车,就是一条波浪线:3.输入三个“”回车,就是一条虚线:4.输入三个“-”,回车,就是一条直线:5 ...

  5. 【JZOJ4884】【NOIP2016提高A组集训第12场11.10】图的半径

    题目描述 mhy12345学习了树的直径,于是开始研究图的半径,具体来说,我们需要在图中选定一个地方作为中心,其中这个中心有可能在路径上. 而这个中心的选址需要能够使得所有节点达到这个中心的最短路里面 ...

  6. ANSI编码方式转化为UTF-8方式

    说明: 记事本txt有四种编码方式,分别为:UTF-8.ANSI.Unicode和Unicode big endian,当进行写操作,创建的txt编码格式,与写入汉字的编码方式相同:如果写入的汉字是不 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换 学习目标 理解如何用矩阵表示线性变换和仿射变换: 学习在 ...

  8. 解决eclipse不会自动弹出Console控制台的问题

    有时候Eclipse启动,控制台console不会自动跳出来,需要手工点击该选项卡才行, 解决方案: windows  ->   preferences   ->  run/debug   ...

  9. CNN对位移、尺度和旋转不变性的讨论

    CNN得益于全局共享权值和pool操作,具有平移不变性. 对于尺度不变性,是没有或者说具有一定的不变性(尺度变化不大),实验中小目标的检测是难点,需要采用FPN或者其他的方式单独处理. 对于旋转不变性 ...

  10. linux 系统下如何进行用户之间的切换

    切换用户的命令是su,su是(switch user)切换用户的缩写.通过su命令,可以从普通用户切换到root用户,也可以从root用户切换到普通用户.从普通用户切换到root用户需要密码(该密码是 ...