# 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. 三、基于任务的异步模式(TAP),推荐使用

    一.引言 在上两个专题中我为大家介绍.NET 1.0中的APM和.NET 2.0中的EAP,在使用前面两种模式进行异步编程的时候,大家多多少少肯定会感觉到实现起来比较麻烦, 首先我个人觉得,当使用AP ...

  2. 推荐一个非常好用的Chrome扩展应用,用于美化Json字符串

    这个Chrome扩展应用的名称叫JSON Viewer Awesome 1.0.6: 安装之后,在Chrome工具栏会出现一个紫色的小图标: 然后可以把任意Json字符串直接贴到Chrome界面里: ...

  3. 迷宫问题——BFS

    改进版 BFS #include <bits/stdc++.h> using namespace std; #define coordi(x,y) ( m*(x-1)+y ) const ...

  4. [cocos2d-x]-会动的精灵

    小鸟一直在扑翅膀的代码块: auto sprite = Sprite::create(); Animation *animation = Animation::create(); animation- ...

  5. hbase hfilev2

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/25508809 HFileV2文件 HFile ...

  6. POJ 1845 Sumdiv 【二分 || 逆元】

    任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...

  7. Linux学习总结(六)-su命令 sudo 命令 限制root远程登录

    root 用户拥有至高无上的权利,那么我们运维人员是不是直接在root用户下处理所有问题呢? 答案是否定的,权力越大,责任越大,人是会犯错的,因此我们要在不影响我们的工作情况下,尽量限制我们的权力,以 ...

  8. ssh调用matplotlib绘图报错RuntimeError: Invalid DISPLAY variable

    1.问题:在本地用matplotlib绘图可以,但是在ssh远程绘图的时候会报错 RuntimeError: Invalid DISPLAY variable 2.原因:matplotlib的默认ba ...

  9. POJ 3984 迷宫问题(简单bfs+路径打印)

    传送门: http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  10. Reading Notes : 180213 计算机的硬件构成与处理流程

    读书<计算机组成原理>,<鸟哥的Linux私房菜基础篇> 基本上接触过计算机的人,都多少知道计算机的具体构成,但是真正能讲明白的却说了很多,本节将讲解一下计算机的基本硬件构成和 ...