1.1 理解 Vuex

1.1.1 Vuex 是什么

  1. 概念:专门在 Vue 中实现集中式状态(数据)管理的一个 Vue 插件,对 Vue 应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。
  2. Github地址

1.1.2 什么时候使用 Vuex

  1. 多个组件依赖于同一状态
  2. 来自不同组件的行为需要变更同一状态

1.1.3 Vuex 工作原理图

1.2 搭建 Vuex 环境与基本使用

1.2.1 环境 Vuex 搭建

  1. 创建文件:src/store/index.js

    1. //引入Vue核心库
    2. import Vue from 'vue'
    3. //引入Vuex
    4. import Vuex from 'vuex'
    5. //应用Vuex插件
    6. Vue.use(Vuex)
    7. //准备actions对象——响应组件中用户的动作
    8. const actions = {}
    9. //准备mutations对象——修改state中的数据
    10. const mutations = {}
    11. //准备state对象——保存具体的数据
    12. const state = {}
    13. //创建并暴露store
    14. export default new Vuex.Store({
    15. actions,
    16. mutations,
    17. state
    18. })
  2. main.js 中创建 vm 时传入 store 配置项

    1. ......
    2. //引入store
    3. import store from './store'
    4. ......
    5. //创建vm
    6. new Vue({
    7. el:'#app',
    8. render: h => h(App),
    9. store
    10. })

1.2.2 基本使用

  1. 初始化数据、配置 actions、配置 mutations,操作文件 store.js

    1. //引入Vue核心库
    2. import Vue from 'vue'
    3. //引入Vuex
    4. import Vuex from 'vuex'
    5. //引用Vuex
    6. Vue.use(Vuex)
    7. const actions = {
    8. //响应组件中加的动作
    9. jia(context,value){
    10. // console.log('actions中的jia被调用了',miniStore,value)
    11. context.commit('JIA',value)
    12. },
    13. }
    14. const mutations = {
    15. //执行加
    16. JIA(state,value){
    17. // console.log('mutations中的JIA被调用了',state,value)
    18. state.sum += value
    19. }
    20. }
    21. //初始化数据
    22. const state = {
    23. sum:0
    24. }
    25. //创建并暴露store
    26. export default new Vuex.Store({
    27. actions,
    28. mutations,
    29. state,
    30. })
  2. 组件中读取 Vuex 中的数据:$store.state.sum

  3. 组件中修改 Vuex 中的数据:$store.dispatch('action中的方法名',数据)$store.commit('mutations中的方法名',数据)

备注:若没有网络请求或其他业务逻辑,组件中也可以越过 actions,即不写 dispatch,直接编写 commit

1.3 Vuex 核心概念和API

1.3.1 state

  1. Vuex 管理的状态对象

  2. 它应该是唯一的

  3. 示例代码:

    1. const state = {
    2. sum:0
    3. }

1.3.2 actions

  1. 值为一个对象,包含多个响应用户动作的回调函数

  2. 通过 commit() 来触发 mutation 中函数的调用,间接更新 state

  3. 如何触发 actions 中的回调?

    在组件中使用:$store.dispatch('对应的action回调名') 触发

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

  5. 示例代码:

    1. const actions = {
    2. //响应组件中加的动作
    3. jia(context,value){
    4. // console.log('actions中的jia被调用了',miniStore,value)
    5. context.commit('JIA',value)
    6. },
    7. }

1.3.3 mutations

  1. 值是一个对象,包含多个直接更新 state 的方法

  2. 谁能调用 mutations 中的方法?如何调用?

    action 中使用: commit('对应的mutations方法名') 触发

  3. mutations 中方法的特点:不能写异步代码、只能单纯的操作 state

  4. 示例代码:

    1. const mutations = {
    2. //执行加
    3. JIA(state,value){
    4. // console.log('mutations中的JIA被调用了',state,value)
    5. state.sum += value
    6. }
    7. }

1.3.4 getters

  1. 概念:当 state 中的数据需要经过加工后再使用时,可以使用 getters 加工。

  2. store.js 中追加 getters 配置

    1. // 准备 getters —— 用于对 state 中的数据进行加工
    2. const getters = {
    3. bigSum(state){
    4. return state.sum * 10
    5. }
    6. }
    7. // 创建并暴露store
    8. export default new Vuex.Store({
    9. ......
    10. getters
    11. })
  3. 组件中读取数据:$store.getters.bigSum

1.4 四个 map 方法的使用

1.4.1 mapState 方法

mapState 方法:用于帮助我们映射 state 中的数据为计算属性

  1. computed: {
  2. //借助mapState生成计算属性:sum、school、subject(对象写法)
  3. ...mapState({sum:'sum',school:'school',subject:'subject'}),
  4. //借助mapState生成计算属性:sum、school、subject(数组写法)
  5. ...mapState(['sum','school','subject']),
  6. },

1.4.2 mapGetters 方法

mapGetters 方法:用于帮助我们映射 getters 中的数据为计算属性

  1. computed: {
  2. //借助mapGetters生成计算属性:bigSum(对象写法)
  3. ...mapGetters({bigSum:'bigSum'}),
  4. //借助mapGetters生成计算属性:bigSum(数组写法)
  5. ...mapGetters(['bigSum'])
  6. },

1.4.3 mapActions 方法

mapActions 方法:用于帮助我们生成与 actions 对话的方法,即:包含 $store.dispatch(xxx) 的函数

  1. methods:{
  2. //靠mapActions生成:incrementOdd、incrementWait(对象形式)
  3. ...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
  4. //靠mapActions生成:incrementOdd、incrementWait(数组形式)
  5. ...mapActions(['jiaOdd','jiaWait'])
  6. }

1.4.4 mapMutations 方法

mapMutations 方法:用于帮助我们生成与 mutations 对话的方法,即:包含 $store.commit(xxx) 的函数

  1. methods:{
  2. //靠mapActions生成:increment、decrement(对象形式)
  3. ...mapMutations({increment:'JIA',decrement:'JIAN'}),
  4. //靠mapMutations生成:JIA、JIAN(对象形式)
  5. ...mapMutations(['JIA','JIAN']),
  6. }

备注:mapActionsmapMutations 使用时,若需要传递参数需要:在模板中绑定事件时传递好参数,否则参数是事件对象。

1.5 模块化+命名空间

  1. 业务场景中需要包含多个 module,一个 module 是一个 store 的配置对象,与一个组件(包含有共享数据)对应
  2. 目的:让代码更好维护,让多种数据分类更加明确

进行模块化:

  1. 修改 store.js

    1. const countAbout = {
    2. namespaced:true,//开启命名空间
    3. state: {x: 1},
    4. mutations: { ... },
    5. actions: { ... },
    6. getters: {
    7. bigSum(state){
    8. return state.sum * 10
    9. }
    10. }
    11. }
    12. const personAbout = {
    13. namespaced:true,//开启命名空间
    14. state:{ ... },
    15. mutations: { ... },
    16. actions: { ... }
    17. }
    18. const store = new Vuex.Store({
    19. modules: {
    20. countAbout,
    21. personAbout
    22. }
    23. })
  2. 开启命名空间后,组件中读取 state 数据

    1. //方式一:自己直接读取
    2. this.$store.state.personAbout.list
    3. //方式二:借助mapState读取:
    4. ...mapState('countAbout',['sum','school','subject']),
  3. 开启命名空间后,组件中读取 getters 数据

    1. //方式一:自己直接读取
    2. this.$store.getters['personAbout/firstPersonName']
    3. //方式二:借助mapGetters读取:
    4. ...mapGetters('countAbout',['bigSum'])
  4. 开启命名空间后,组件中调用 dispatch

    1. //方式一:自己直接dispatch
    2. this.$store.dispatch('personAbout/addPersonWang',person)
    3. //方式二:借助mapActions:
    4. ...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
  5. 开启命名空间后,组件中调用 commit

    1. //方式一:自己直接commit
    2. this.$store.commit('personAbout/ADD_PERSON',person)
    3. //方式二:借助mapMutations:
    4. ...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'}),

Vue Vuex状态管理的更多相关文章

  1. Vue之状态管理(vuex)与接口调用

    Vue之状态管理(vuex)与接口调用 一,介绍与需求 1.1,介绍 1,状态管理(vuex) Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态 ...

  2. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

  3. 前端Vue框架-vuex状态管理详解

    新人报道!多多关照-多提宝贵意见 谢谢- vuex理解 采用集中式存储管理模式.用来管理组件的状态,并以自定义规则去观测实时监听值得变化. 状态模式管理理解 属性 理解 state 驱动应用的数据源 ...

  4. vue第十八单元(单向数据流 vuex状态管理)

    第十八单元(单向数据流 vuex状态管理) #课程目标 1.理解什么是数据管理模式 2.什么是vuex 3.什么时候使用vuex 4.vuex安装及工作原理 5.vuex语法 #知识点 1.首先来看下 ...

  5. vue 通信:父子通信、兄弟通信、跨多层通信、vuex状态管理

    之前简单做了一次vue通信方法的培训,在此记录一下培训的内容. 关于vue通信,大家最先想到的方法应该是props.ref.$emit.$parent,还有vuex,因为这也是我在项目中最常用到的方法 ...

  6. vuex状态管理-数据改变不刷新

    困惑: 在页面初始化的时候,我提交到vuex状态管理,然后在获取的时候获取不到,我找到了出错的地点,并进行了修改,然后可以获取到状态 但是不知道原因? 定义了如下的state const state ...

  7. vuex状态管理demo

    vuex状态管理主要包含四个概念  mapState,mapMutations,mapGetters,mapActions. 编写vuex文件夹下面的store.js import Vue from ...

  8. 前端技术之:如何在vuex状态管理action异步调用结束后执行UI中的方法

    一.问题的起源 最近在做vue.js项目时,遇到了vuex状态管理action与vue.js方法互相通信.互操作的问题.场景如下图所示: 二.第一种解决方法 例如,我们在页面初始化的时候,需要从服务端 ...

  9. 了解Vuex状态管理模式的理解强化指南

    1 Vuex是什么呢?它是Vue的状态管理模式,在使用vue的时候,需要在vue中各个组件之间传递值是很痛苦的,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被改变,所有引用该值的地 ...

  10. VueX状态管理器 的应用

    VueX状态管理器 cnpm i vuex axios -S 1 创建Vuex 仓库 import Vue from 'vue' import Vuex from 'vuex' vue.use(Vue ...

随机推荐

  1. 使用 ChatGPT 的 7 个技巧 | Prompt Engineering 学习笔记

    概述 前段时间在 DeepLearning 学了一门大火的 Prompt 的课程,吴恩达本人授课,讲的通俗易懂,感觉受益匪浅,因此在这里总结分享一下我的学习笔记. 为什么要学习 Prompt ? 因为 ...

  2. go 实现ringbuffer以及ringbuffer使用场景介绍

    ringbuffer因为它能复用缓冲空间,通常用于网络通信连接的读写,虽然市面上已经有了go写的诸多版本的ringbuffer组件,虽然诸多版本,实现ringbuffer的核心逻辑却是不变的.但发现其 ...

  3. 2023-06-07:Redis 持久化方式有哪些?以及有什么区别?

    2023-06-07:Redis 持久化方式有哪些?以及有什么区别? 答案2023-06-07: Redis提供了两种持久化机制:RDB和AOF. RDB RDB持久化是将Redis当前进程中的数据生 ...

  4. Min-25 筛学习笔记

    Min-25 筛学习笔记 \(\text{By DaiRuiChen007}\) 一.简要介绍 Min-25 筛,是一种能在亚线性时间内求出特定的一类积性函数 \(f(i)\) 的前缀和的算法. 具体 ...

  5. 洛谷 P5979 [PA2014] Druzyny

    简要题意 有 \(n\) 个人,把他们划分成尽可能多的区间,其中第 \(i\) 个人要求它所在的区间长度大于等于 \(c_i\),小于等于 \(d_i\),求最多的区间数量以及如此划分的方案数. 数据 ...

  6. 一篇讲懂Java运行类型、编译类型和多态(面向对象语言精髓之一)

    对象:运行类型.编译类型和多态 1.搞清楚面向对象的运行类型和编译类型就掌握了对象的精髓,我们用举个例子 class Father { Father() { System.out.println(&q ...

  7. Subset Sum 问题单个物品重量限制前提下的更优算法

    前言 看了 ShanLunjiaJian 关于这个问题的文章,是完全没看懂,沙东队爷的中枢神经内核配置把我偏序了.叉姐在下面提了个论文,论文找不到资源,谁搞到了可以 Q 我一份之类的拜谢了.然后找到了 ...

  8. Java 访问控制权限修饰符

    1.访问控制权限修饰符来控制元素的访问范围 2.访问控制权限修饰符包括: public 表示公开的,任何位置都可以可以访问 protected 同包,子类 缺省 同包 private 表示私有的,只能 ...

  9. 自然语言处理 Paddle NLP - 任务式对话系统-理论

    什么是任务型对话: 任务型:用于帮助用户完成某领域的特定任务,例如订餐.查天气.订票等 闲聊型:也称作开放域对话系统,目标是让用户持续的参与到交互过程,提供情感陪伴 问答型:提供知识满足,具体类型比较 ...

  10. UE5打包SDK未正确安装的问题

    正文 Windows(笔者之前用的电脑是windows10,最新电脑使用的是windows11)下UE5打包项目的需要安装Visual Studio. 而且安装的时候需要选择上C++ 游戏开发相关模块 ...