# 1. vuex是什么

github站点: https://github.com/vuejs/vuex

在线文档: https://vuex.vuejs.org/zh-cn/

简单来说: 对应用中组件的状态进行集中式的管理(读/写)

# 2. 状态自管理应用

state: 驱动应用的数据源

view: 以声明方式将state映射到视图

actions: 响应在view上的用户输入导致的状态变化(包含n个更新状态的方法)

![单向数据流](https://vuex.vuejs.org/zh-cn/images/flow.png)

# 3. 多组件共享状态的问题

多个视图依赖于同一状态

来自不同视图的行为需要变更同一状态

以前的解决办法

* 将数据以及操作数据的行为都定义在父组件

* 将数据以及操作数据的行为传递给需要的各个子组件(有可能需要多级传递)

vuex就是用来解决这个问题的

![vuex结构](https://vuex.vuejs.org/zh-cn/images/vuex.png)

# 4. vuex的核心概念

## 1). state

vuex管理的状态对象

它应该是唯一的

 const state = {

  xxx: initValue

 }

## 2). mutations

包含多个直接更新state的方法(回调函数)的对象

谁来触发: action中的commit('mutation名称')

只能包含同步的代码, 不能写异步代码

 const mutations = {

  yyy (state, data) { 

   // 更新state的某个属性

  }

 }

## 3). actions

包含多个事件回调函数的对象

通过执行: commit()来触发mutation的调用, 间接更新state

谁来触发: 组件中: $store.dispatch('action名称')  // 'zzz'

可以包含异步代码(定时器, ajax)

 const actions = {

  zzz ({commit, state}, data1) {

   commit('yyy', data2)

  }

 }

## 4). getters

包含多个计算属性(get)的对象

谁来读取: 组件中: $store.getters.xxx

 const getters = {

  mmm (state) {

   return ...

  }

 }

## 5). modules

包含多个module

一个module是一个store的配置对象

与一个组件(包含有共享数据)对应

## 6). 向外暴露store对象

 export default new Vuex.Store({

  state,

  mutations,

  actions,

  getters

 })

## 7). 组件中:

import {mapGetters, mapActions} from 'vuex'

 export default {

  computed: mapGetters(['mmm'])

  methods: mapActions(['zzz'])

 }
{{mmm}} @click="zzz(data)"

## 8). 映射store

 import store from './store'

 new Vue({

  store

 })

## 9). store对象

1.所有用vuex管理的组件中都多了一个属性$store, 它就是一个store对象

2.属性:

state: 注册的state对象

getters: 注册的getters对象

3.方法:

 dispatch(actionName, data): 分发action  

# 5. 将vuex引到项目中

## 1). 下载: npm install vuex --save

## 2). 使用vuex

1.store.js
import Vuex from 'vuex'

  export default new Vuex.Store({

   state,

   mutations,

   actions,

   getters,

   modules

  })
 2.main.js
import store from './store.js'

  new Vue({

   store

  })

vue核心概念的更多相关文章

  1. 极客时间_Vue开发实战_05.Vue组件的核心概念(1):属性

    05.Vue组件的核心概念(1):属性 代码地址: https://github.com/tangjinzhou/geektime-vue-1/blob/master/%E6%BC%94%E7%A4% ...

  2. 极客时间_Vue开发实战_06.Vue组件的核心概念(2):事件

    06.Vue组件的核心概念(2):事件 通过emit传递给父组件 我们点击了重置失败,上层的div的click=handleDivClick是接收不到.重置失败的点击的行为的 通常情况下,你不用.st ...

  3. 极客时间_Vue开发实战_07.Vue组件的核心概念(3):插槽

    07.Vue组件的核心概念(3):插槽 严格来的说在2.0之后已经不分区这两种插槽的概念了. 因为它底层的实现已经趋向于相同了. 2.6为了兼容2.5的版本,现在依然可以用这两种写法 作用域插槽就是多 ...

  4. 2.基础:Vue组件的核心概念

    一.组件基础和注册 组件概念 组件系统是 Vue 的另一个重要概念,他的核心就是封装和复用. 细节 组件的name必须是全局唯一. 二.属性.事件和插槽 组件的三大核心概念:属性.事件和插槽. 属性, ...

  5. 深入理解Vue组件3大核心概念

    摘要: 搞懂Vue组件! 作者:浪里行舟 原文:详解vue组件三大核心概念 Fundebug经授权转载,版权归原作者所有. 前言 本文主要介绍属性.事件和插槽这三个vue基础概念.使用方法及其容易被忽 ...

  6. 【VUE】8.VUEX核心概念

    1. Vuex核心概念主要如下 state : 存储共享数据 mutation: 变更store中的数据,方法,不能异步操作 action: 异步操作,通过触发mutation变更数据 getter: ...

  7. vue(23)Vuex的5个核心概念

    Vuex的核心概念 Vuex有5个核心概念,分别是State,Getters,mutations,Actions,Modules. State   Vuex使用单一状态树,也就是说,用一个对象包含了所 ...

  8. Vue基础概念,学习环境等

    前提: 你已有 HTML.CSS 和 JavaScript 中级前端知识. 概念: Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vu ...

  9. react 教程—核心概念

    react 核心概念  : https://react.docschina.org/docs/getting-started.html(官网) 或  https://www.w3cschool.cn/ ...

随机推荐

  1. ZT Factory Pattern

    图中的虚线箭头表示依赖关系

  2. SAP云平台对Kubernetes的支持

    截至本文发稿(2019-2-10, 农历大年初六)时为止,访问SAP云平台的官方网站:https://cloudplatform.sap.com/enterprise-paas/kubernetes. ...

  3. SOJ4459 skysky's game(贪心+优先队列)

    天天最近迷上了天天爱消除游戏,现在他觉得这个游戏已经没有意思了.所以他发明一个新的消除游戏.有n堆糖果,每一个糖果有一个重量w,天天每次都选择两个糖果合并为一个糖果,新的糖果的重量等于这两个糖果的重量 ...

  4. ADFUtils

    import java.text.SimpleDateFormat; import java.util.Map; import javax.el.ELContext;import javax.el.E ...

  5. 牛客网多校训练第一场 D - Two Graphs

    链接: https://www.nowcoder.com/acm/contest/139/D 题意: 两个无向简单图都有n(1≤n≤8)个顶点,图G1有m1条边,图G2有m2条边,问G2有多少个子图与 ...

  6. BZOJ1614:[USACO]Telephone Lines架设电话线(二分,最短路)

    Description FarmerJohn打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司 支付一定的费用.FJ的农场周围分布着N(1<=N< ...

  7. SQL 关联两个表的视图总结

    视图就是一条select查询语句,是一张虚拟表. table a  , table b  以表a基表(a LEFT  JOIN b) 1.1 当update view时 更新view中表b字段并且表b ...

  8. faster-rcnn anchor_target_layer、rpn_proposal_layer、proposal_target_layer

    faster rcnn中这三层是单独生成的层,也是复现最复杂的层 anchor_target_layer作用:从众多的anchor中选取出正负样本供rpn网络学习(实际上就是把anchor和gt进行配 ...

  9. java 编写小工具 尝试 学习(三)

    1.在 新建的 窗口上  添加  按钮  ,不废话 ,贴代码和 截图 package jFrameDemo; import java.awt.event.ActionEvent; import jav ...

  10. win764 ping不能用的问题

    1.某日发现,ping突然用不了了 2.百度一搜,有如下解答: 1.右击计算机点属性之后找到系统属性下的环境变量: 2.找到系统变量的"path"之后按“编辑”: 3.变量值前面的 ...