# 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. CentOS release 6.5 yum安装报错

    单独安装如下任何一个包都会报依赖错误,需要一起安装才可以 rpm -ivh yum-plugin-fastestmirror-1.1.30-14.el6.noarch.rpm yum-3.2.29-4 ...

  2. UNIX和linux系统性能监控工具oswatcher

    可以在一台机器上运行oswatcher.把运行的结果拷贝到有vnc的机器上进行分析.java -jar oswbba.jar -i /mnt/hgfs/database/oswbb/archive . ...

  3. Java实现的有道云笔记图片批量下载工具

    有朋友问我每天哪里找时间写这么多文章. 作为一个程序员,当然要善于利用各种工具提高自己做事情的效率了.如果没有现成的工具,就得自己造. 我写文章一般是在云笔记里编辑,完成之后直接复制粘贴到自媒体平台. ...

  4. 关于Tomcat服务器接收到的请求参数乱码的问题

    我们在编写的Controller 等服务器端的代码时,接受到的请求参数经常会乱码. 解决:在Tomcat 的安装目录下找到conf 文件夹下的server.xml文件用记事本打开. 找到 <Co ...

  5. BZOJ2756:[SCOI2012]奇怪的游戏(最大流,二分)

    Description Blinker最近喜欢上一个奇怪的游戏. 这个游戏在一个 N*M 的棋盘上玩,每个格子有一个数.每次 Blinker 会选择两个相邻 的格子,并使这两个数都加上 1. 现在 B ...

  6. 【[USACO09DEC]牛收费路径Cow Toll Paths】

    很妙的一道题,我之前一直是用一个非常暴力的做法 就是枚举点权跑堆优化dijkstra 但是询问次数太多了 于是一直只有50分 今天终于抄做了这道题,不贴代码了,只说一下对这道题的理解 首先点权和边权不 ...

  7. 快速了解jquery

    jQuery的基本设计思想和主要用法,就是"选择某个网页元素,然后对其进行某种操作".这是它区别于其他Javascript库的根本特点. 所以jquery的基础语法是: $(sel ...

  8. Selenium基础知识(元素定位的调试)

    对一个不能直接定位的元素来说,调试是很常见的事,所以这里也简单总结了一下. 调试定位元素的工具很多,介绍也多,就不一一介绍了.下次有时间再补充.以下是我常用调试的方法(浏览器自带的控制台调试,仅介绍一 ...

  9. 隐藏C#的TabControl控件的选项卡TabPage

    在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).TabPage类明明提供了一个Hide方法,用在代码中却没有任何效果,甚是奇怪.无奈之余,只好考虑另辟途径.方法一:设置该 ...

  10. JQuery给一个元素绑定两次点击事件(第二次点击事件)

    由于项目的要求,需要给复选框设置样式,初始样式:,第一次点击的时候显示,第二次点击时候需要改变该样式:. 设计思路: 当点击次数为奇数时显示带有颜色的图片 当点击次数为偶数时显示没有颜色的图片 下边是 ...