​ Vuex是应用程序的状态(state)管理器 。它采用集中式存储、管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

​ 把vue应用的数据放在一个地方管理。 每一个vue的组件都可以有data项(有自己的数据),我们可以通过父子之间的相互传递,进行数据的交换。

父传子:自定义的属性; 子组件用props

子传父:自定义的事件;子组件用emit

1.为什么要用Vuex呢?

答:如果你的项目中,需要用到在各个子组件中共享数据,则你就需要用到vuex。 因为子组件与另一个组件之间共享(它们是兄弟,表兄弟,堂兄弟关系)数据,非常麻烦。

2.使用步骤:

  1. 先引入vue.js,再引入vuex.js,此时,你已经可以在控制台中访问vuex。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3OS0wetN-1653739481823)(C:\Users\67333\AppData\Roaming\Typora\typora-user-images\1653737780906.png)]

  2. 实例化vuex中的store对象

    实例化一个对象,就是通过new的方式去创建一个对象

  3. 将实例化对象store注入到Vue实例中

  4. 定义子组件并在根组件注册子组件

  5. 使用store中的数据

    一旦你在vue的实例中注入了store,则在所有的子组件及 vue的实例中,你都可以通过:this.$store.state.数据名 去获取数据 。

    可以通过this.$store.state.数据名 = 值 去暴力修改数据,但是,vuex反对这么做。

3. Vuex最核心的概念-store

​ Vuex 应用的核心就是 store(仓库)。 store是一个容器,包含着vue应用的状态(state)。

两大特点 :

  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
  2. 可以方便地跟踪每一个状态的变化。我么不能直接更改 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交(commit) mutations(后面会说明mutations是什么)。

4. Vuex的四个概念

  • state:存放数据。在组件之间共享。
  • mutations:修改数据的唯一途径。
  • getters:从state中的数据中,取出一部分来,依据数据项产生新的结果。类似于vue实例中的computed(计算属性)。
  • actions:在对数据实现异步操作时,要用的。

1. state

仓库中的数据就存放在state中,state中的数据在组件之间共享。

1. 那么在组件中应该如何去获取保存在vuex.中的数据?

方法一:$store.state.数据名


2. 方法二:变通一下,手动映射,在组件内部用一个计算属性来获取数据。

注意:不要设置成组件的data。

为什么可以设置为计算属性,而不要设置成data?

原因是:计算属性一般就是只读的:通过它去获取数据。而data是可以直接修改的,如果你绑定到data中的数据项是引用数据类型,则对data的修改也会影响到vuex中的数据:

3. 方法三:mapState

this.$store.state.amount写起来比较麻烦。在vuex中提供一个便捷的写法:mapState。它的作用:是把写在vuex.store.state中的数据直接映射到组件中计算属性中。

(1)在组件的script中,先导入一个特殊的函数mapState.

(2)直接在组件的计算属性中,把仓库中的状态自动映射成本组件内的计算属性。

mapState([“count”,”num1”,”num2”]):mapState是一个函数,这里就是调用这个函数,实参是一个数组[“count”,”num1”,”num2”]。它的返回值是一个对象。

…mapState([“count”,”num1”,”num2”]):把一个对象进行“拆分”,称为拓展运算符。

整个来看:computed是一个属性名,属性值是一个对象,其中的组成是对mapState()这个函数的返回值进行拓展运算。这样就可以直接在组件内部把arr和amount当作计算属性来用。

2. Getters

Getters:仓库中的计算属性。

每一个Getters函数的第一个参数都是状态。

1. 在vuex定义getters:

import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
const store =new Vuex.Store({// 开启严格模式strick:true,state:{count:0,age:12,height:188,list:[{name:"az",score:46},{name:"sx",score:24},{name:"dc",score:50},{name:"fv",score:78},]},// 仓库中的计算属性getters:{// 每一个 getters 的第一个参数都是状态failNumber(state){let n=0;state.list.forEach(item=>{if(item.score<60){n++;}})return n;}},
});
export default store;

2.在组件中使用getters:

方法一:$store.getters.failedNumber

方法二 :mapGetters

与mapState类似,它的作用也是用来帮助我们去简化代码。我们如果直接定义一个计算属性也是可以的。

3. Mutations

​ Mutations:用来修改数据的唯一工具 ,可以追踪到状态变化。mutations函数的第一个参数是状态,每一个mutations都有commit,需要在组件中 用commit对数据进行修改。

在仓库中定义Mutations:


使用:

<template><div><p>我是add组件</p><p>在Add组件中使用仓库中的状态:{{ count }}</p><!-- <button @click="add">+1</button> --></div>
</template>
<script>
import { mapState, mapMutations } from "vuex"
import { ADD } from "../store/types"
export default {// mapState 把仓库中的状态映射成计算属性computed:{// 自动映射...mapState(["count"])},methods:{// 法二:把仓库中的mutaion映射成组件的方法// ...mapMutations(["add"]),//法一:自己定义add函数通过commit改变数据// add(){//   // this.$store.state.count++;//       // 通过mutaion来修改属性 //   // 每一个mutaion都有一个commit//   this.$store.commit("add")// }}
}
</script>

4. Actions

在严格模式下,在mutations中写异步代码会警告,而且控制台不好追踪状态变rotu。可以将异步代码子写在Actions中,Actions中仅仅只是放异步代码,但是里面需要改变状态的唯一途径还是通过mutation,在组件中可以 dispatch一个mutation去改变数据。


虽然把异步操作写在actions中,但是改变状态的唯一方式是不变,还是通过mutations

在 mutation 中混合异步调用会导致你的程序很难调试。

action类似于mutations,不同在于:

  • actions 提交的是 mutations,而不是直接变更状态。
  • actions 可以包含任意异步操作。
  • action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,可以通过context.commit提交,也可以通过context.state获取state。

5. 小结

import {mapState,mapGetters,mapMutations,mapActions} from “vuex”;

map系列方法的作用(难点)。

我们之所以用 map系列的方法,是因为它可以帮助我们去简化代码。

不用map 用map
State 在组件的计算属性中的使用。 computed:{ amount:function(){ return this.$store.state.amount; } } Import {mapState} from “vuex” Computed{ …mapState([“amount”]), }
Getters computed:{ failedNumber:function(){ return this.$store.getters.failedNumber; } } computed:{ …mapGetters([“failedNumber”]), }
mutations methods:{ add:function(obj){ return this.$store.commit(“add”,obj); } } methods:{ …mapMutations([“add”]) }
Actions methods:{ add:function(obj){ return this.$store.dispatch(“add”,obj); } } methods:{ …mapActions([“add”]) }

Vuex快速上手,state、getter、Mutations、Actions相关推荐

  1. Vuex的作用、使用、核心概念(State、Mutations、Getters、Actions、Modules)、文件抽离

    vue入门–基础命令+axios+案例练习 vue入门–vue常用属性.生命周期.计算属性.过滤器.组件.虚拟DOM.数组的响应式方法.页面闪烁.ES6简单语法增强 vue入门–js高阶函数(箭头函数 ...

  2. 几分钟搞懂Vuex(State,Mutations,Actions)

    文章目录 State Getters Mutation Actions 这是Vuex官方给出的图片,看起来有点不好理解,上详解!!!! 开始介绍之前,我们需要将Vuex挂载到Vue实例上面,这样我们才 ...

  3. Vuex中state,getters,mutations的使用方法以及辅助函数的原理

    Vuex是是一个程序里面的状态管理模式,它是集中式存储所有组件的状态的小仓库,并且保持我们存储的状态以一种可以预测的方式发生变化. state中存放的是全局变量,定义如下 state: {//存放全局 ...

  4. Vue2.0快速上手-重要知识点罗列-系列一

    Vue2.0快速上手 脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src ...

  5. 【转】Vue.js 2.0 快速上手精华梳理

    Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...

  6. react 快速上手开发_React中测试驱动开发的快速指南

    react 快速上手开发 by Michał Baranowski 通过MichałBaranowski React中测试驱动开发的快速指南 (A quick guide to test-driven ...

  7. vuex重置所有state(可定制)

    在正式场景中我们经常遇到一个问题,就是登出页面或其他操作的时候,我们需要重置所有的vuex,让其变为初始状态, 那么,就涉及到了多种方法: 1.页面刷新: window.location.reload ...

  8. Vuex的使用(九)——actions的其他用法

    参考文档:https://vuex.vuejs.org/zh/guide/ 在上一章的例子中介绍了actions可以在内部发起异步请求,且能够在内部调用mutation,下面介绍一下actions的其 ...

  9. P4 Tutorial 快速上手 (3) Basic_tunnel

    P4 Tutorial 快速上手 (3) Basic_tunnel 提示:本系列仅适用于软件交换机BMv2 P4 Tutorial 快速上手 (2) 文章目录 P4 Tutorial 快速上手 (3) ...

最新文章

  1. mySQL优化 my.ini 配置说明
  2. 实战并发编程 - 01多线程读写同一共享变量的线程安全问题深入剖析
  3. 多节锂电串联保护板ic_BMS电池管理系统与锂电池保护板的区别
  4. IOS UIAlertController 使用方法
  5. Rxjava、Retrofit返回json数据解析异常处理
  6. linux中find查找命令的mtime参数使用方法说明
  7. 逆向推导https的设计过程
  8. php项目中使用element.ui和vue
  9. springboot 别名不起作用_springboot之mybatis别名的设置
  10. android动画入门,Android动画之入门篇(一)
  11. springcloud基于ribbon的canary路由方案 1
  12. linux下 根目录扩展
  13. 将字符'0'-'9'转换为数字(c语言)
  14. 2020成人高考计算机基础知识题库,2020年成人高考计算机基础考试模拟题
  15. 【bzoj4200】[Noi2015]小园丁与老司机 dp+有上下界的网络流
  16. 百度世界2020技术“大阅兵”背后的营销战役
  17. win7 x64部署和串口调试虚拟驱动toaster
  18. 数据分析案例-气象数据分析
  19. java 对齐文本框_如何对齐文本框和旁边的图像按钮
  20. 挑战程序设计竞赛——详解DFS及BFS

热门文章

  1. 延缓写入失败计算机硬件,XP系统提示“延缓写入失败文件”的四种原因和解决方法-...
  2. 虚拟专用网络与NAT
  3. 略少面试题 项目中用到的技术详解 有用
  4. 全国大学生网络安全精英赛练习题
  5. Spring MVC调度流程
  6. “Z世代”成网恋一代?探探数据:四成受访者用社交软件谈过恋爱
  7. NPOI对Excel数据的读取删除修改写入
  8. About@fant-face
  9. uboot移植项目总结
  10. VB2010动态加载文件的怪问题