vue-learning:40 - Vuex - 第一篇:概念和基本使用
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. 引入vue 和 vuex
import Vue from 'vue'
import Vuex from 'vuex'
// 2. 在vue中注册vuex插件
Vue.use(Vuex)
// 3. 实例化一个管理状态的仓库store
const store = new Vuex.Store({
state:{},
getters: {},
mutations: {},
actions: {},
modules: {}
})
// 4. 将store 全局注入到vue实例
const app = new Vue({
el: "#app",
// 把 store 对象提供给 “store” 选项,这样就可以把 store 的实例注入所有的子组件
store,
// 其它代码...
})
// 5. 组件中使用 this.$store
const Counter = {
template: `<div>{{ count }}</div>`,
computed: {
count () {
return this.$store.state.count
}
}
}
总结下约定的规则,简单的说就是:commit mutation,dispatch action

vue-learning:40 - Vuex - 第一篇:概念和基本使用的更多相关文章
- vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录
一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...
- HTTP/2探索第一篇——概念
版权声明:本文由张浩然原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/87 来源:腾云阁 https://www.qclou ...
- Vue学习之路第一篇(学习准备)
1.开发工具的选择 这个和个人的开发习惯有关,并不做强求,厉害的话用记事本也可以.但是我还是建议用人气比较高的编辑工具,毕竟功能比较全面,开发起来效率比较高. 我之前写前端一直用的是sublimete ...
- vue学习指南:第一篇 - vue的介绍
三大主流框架: 1. Vue.js 是目前最火的一个前端框架,react是最流行的前端框架 (react除了开发网站,还可以开发手机app,Vue语法也是可以用于手机App开发的,需要借助于wexx) ...
- storm第一篇--概念,例子,参数优化
1 概念 目前最新的0.8.0版本里面 worker -> 进程.一个worker只能执行同一个spout/bolt的task,一个worker里面可以有多个executor. executor ...
- vue.js学习系列-第一篇(代码)
<html> <head> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"> ...
- vue.js学习系列-第一篇
VUE系列一 简介 vue是一个兴起的前端js库,是一个精简的MVVM.从技术角度讲,Vue.js专注于 MVVM 模型的 ViewModel 层.它通过双向数据绑定把 View 层和 Mode ...
- Vue.js学习笔记 第一篇 数据绑定
双花括号文本插值 先来个最简单的例子,看完之后立马会用Vue了,是不是很有成就感 <!DOCTYPE html> <html> <head> <meta ch ...
- AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX
AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX 一.什么是JSX 使用JSX声明一个变量(REACT当中的元素): const element =< ...
随机推荐
- Hdu 1729 Nim博弈
点击打开题目链接 之前没做过这题,因为学弟问到我如果来求该题的sg值,才做了这题. 首先, 是多堆Nim博弈毫无疑问,这题是往一个有固定容量的箱子里放石子,和从一堆石子里面拿出石子是一个道理. 和传统 ...
- HTML5八大特性助力移动WebApp开发
http://www.cocoachina.com/webapp/20150906/13344.html WebApp的实现基础就是HMTL5+JS+CSS3,但是WebApp还是基于浏览器的微网站开 ...
- java连接oracle jdbc连接
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection ct=Driver.Magager.getConnecti ...
- 【NS2】NS2中802.11代码深入理解—packet传输的流程(转载)
如何传送一个封包(How to transmit a packet?)首先,我们要看的第一个function是在mac-802_11.cc内的recv( ),程式会先判断目前呼叫recv( )这个pa ...
- SharpDX初学者教程第1部分:在Visual Studio 2013中设置SharpDX项目
原文 http://www.johanfalk.eu/blog/sharpdx-tutorial-part-1-setting-up-a-sharpdx-project-in-visual-studi ...
- Java成员方法,构造方法
//作者:qingfeng//2017/2/17//功能:理解类的成员方法和构造方法class CreatWays{ public static void main(String args[]){ ...
- Java练习 SDUT-1294_选票统计
选票统计 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 某校学生会主席由全校学生投票选举产生,共有m名候选人报名参选, ...
- 03搭建docker私有仓库
搭建docker私仓,可以使用docker官方提供的registry镜像.该镜像目前有2.0,2.3和2.3.1版本.它只与1.6.0以上版本的docker兼容.搭建私仓的步骤如下: 一:无代理.无认 ...
- GitOps:Kubernetes多集群环境下的高效CICD实践
为了解决传统应用升级缓慢.架构臃肿.不能快速迭代.故障不能快速定位.问题无法快速解决等问题,云原生这一概念横空出世.云原生可以改进应用开发的效率,改变企业的组织结构,甚至会在文化层面上直接影响一个公司 ...
- Android Service Summary
In the Androird, service is a none-UI background process that is doing some specific jobs. 6.1 Ex ...