【vuex之五大核心概念】

vuex:五大核心概念

  • 一、state状态
    • 1.state的含义
    • 2.如何访问以及使用仓库的数据
      • (1)通过store直接访问
        • 获取store对象
      • (2)通过辅助函数MapState
  • 二、mutations
    • 1.作用
    • 2.严格模式
    • 3.操作流程
      • 定义 mutations 对象,对象中存放修改 state 的方法
      • 组件通过commit调用mutations进行修改
    • 4.mutations传参
      • mutation 对象中定义带参函数
      • 提交调用 mutation
    • 5.辅助函数mapMutations
      • (1)作用
      • (2)操作步骤
  • 三、actions
    • 1.作用
    • 2.操作流程
    • 3.辅助函数mapActions
      • 作用
      • 流程
  • 四、getters
    • 1.作用
    • 2.操作流程
    • 3.辅助函数mapGetters
  • 五、module(分包管理)
    • 1.作用
    • 2.创建module模块
    • 3.直接使用模块中的数据
      • (1)方式一:直接通过模块名访问
      • (2)方式二:mapState
    • 4.使用模块中getters的数据
      • (1)方式一:直接通过模块名访问
      • (2)方式二:mapGetters
    • 5.调用模块中的mutation
      • (1)方式一:直接调用
      • (2)方式二:mapMutation
    • 6.调用模块中的actions
      • (1)方式一:直接调用
      • (2)方式二:mapAction
  • 六、总结

一、state状态

1.state的含义

是整个应用的仓库,存储共用的数据

2.如何访问以及使用仓库的数据

一般来说,都有直接访问和通过辅助函数进行访问这两种方式

(1)通过store直接访问

获取store对象
适用场景语法
Vue 组件内部访问 store 对象this.$store
普通的 js 模块中获取 store 对象import store from ‘.xxx/store’
使用数据
适用场景语法
vue模板中{{ $store.state.xxx}}
Vue组件的js逻辑代码中this.$store.state.xxx
普通的 js 模块中store.state.xxx

(2)通过辅助函数MapState

辅助函数能帮助我们简化代码,使用起来更加方便

//store下的index.js文件
const store = new Vuex.Store({
  state: {
	name:"小美“
  }
//在需要使用的组件内导入mapState
import { mapState } from 'vuex'
//用数组方式引入State,用展开运算符进行映射
export default {
  computed: mapState(['name']),
 
}

这样,我们就可以在模板中直接使用 {{ name }} 来获取并展示 name 的值。

二、mutations

1.作用

用于修改仓库里面的数据
原因:在vuex中同样要遵循单项数据流,组件是不能直接修改仓库中的数据的,所以我们需要在用mutations修改数据

2.严格模式

因为vuex不允许组件直接修改仓库里的数据,为了避免某些错误写法可能导致无效的问题,我们可以通过开启严格模式检查问题

//store/index.js
const store =new Vuex.Store({
	strict:true,
	state:{
	xxxxxx
	}
})

3.操作流程

定义 mutations 对象,对象中存放修改 state 的方法

const store = new Vuex.Store({
state: {
	name:"小美”
},
// 定义mutations对象
mutations: {
// 第一个参数要求是当前store的state属性
changeName (state) {
			state.name:"小帅“
		}
	}
})

组件通过commit调用mutations进行修改

this.$store.commit('changeName')

4.mutations传参

mutation 对象中定义带参函数

mutations: {
changeName (state,name) {
			state.name:name
		}
}

提交调用 mutation

this.$store.commit('changeName', 小羊)

注意:传参只能传state和一个自定义的参数,不支持传多个参数,但是支持传state和一个对象/数组

5.辅助函数mapMutations

(1)作用

把mutation中定义的方法提取出来,映射在组件中的methods

(2)操作步骤

store/index文件中定义mutation对象的代码不变

//在需要使用的组件内导入mapMutations
import { mapMutations } from 'vuex'
//映射在methodss中
methods: {
...mapMutations(['changeName'])
}

就可以直接调用仓库里的方法,例如,模板里

    <button @click="changeName(‘大灰狼’)">点一下我就改名</button>

而在组件js逻辑代码块中用this.changeName(‘大灰狼’)即可调用

三、actions

1.作用

用于处理异步操作
注意:actions处理异步,mutations只能处理同步,actions中的异步操作也是在调用mutations中定义的方法

2.操作流程

下面给出一个一秒后给数组增添一个数的例子:

// store.js

state () {
    return {
      list: []
   }
},
mutations = {
  addNumber(state, number) {
    state.list.push(number);
  }
}
actions = {
  async addNumberWithDelay(context,number) {
	setTimeout(()=>{
		context.commit('addNumber',number)
	},1000)	
  }
}

页面中用dispatch调用actions的方法

this.$store.dispatch('addNumberWithDelay', 666)

3.辅助函数mapActions

作用

把在actions中的方法提取出来,映射在组件中的methods方法里

流程

在需要使用的组件里直接导入:

import { mapActions } from 'vuex'
methods: {
...mapActions(['addNumberWithDelay'])
}

在组件js逻辑代码块中用this.addNumberWithDelay(666’)即可调用

四、getters

1.作用

基于state里的数据进行一些操作
类似于computed计算属性

2.操作流程

例如,我们要对state里面定义好的一个数组进行筛选,筛选得到一个全是正数的列表

// store.js

const state = {
 numbers: [1, -2, 3, -4, 5]
};

const getters = {
 positiveNumbers: state => {
   return state.numbers.filter(num => num > 0);
 }
};

在需要的组件中得到该方法筛选后的数组

 return this.$store.getters.positiveNumbers

3.辅助函数mapGetters

同样也是提取getters中的方法,映射在computed中

import { mapGetters } from 'vuex'
methods: {
...mapGetters(['positiveNumbers'])
}

在组件js逻辑代码块中用this.positiveNumbers即可调用
注意:如果是在模板中调用是{{ positiveNumbers }},具体语法在上文表格中已经提到过:点我跳转查看

五、module(分包管理)

1.作用

在 Vuex 中,使用 module 可以把 store 分割成多个小模块,每个模块都有自己的 state、mutations、actions、getters 等属性,从而使得 Vuex 管理较为复杂的应用程序变得更加方便和灵活
因为一个应用会涉及到很多板块的数据,为了防止store特别膨胀复杂,管理起来更加麻烦,所以我们需要进行拆分,这样方便后续进行维护、扩展和升级等等……

2.创建module模块

大致思路是在store文件目录下新建modules文件夹,再创建不同板块的js文件。各个板块的文件中都有属于自己的state,mutations,actions和gettters.
下面举一个user的例子:

// store/modules/user.js
const state = {
  userInfo: {
  name:‘敲代码的小乐最快乐’,
  isLoggedIn: false
	}
}
const mutations = {}
const actions = {}
const getters = {}
export default {
state,
mutations,
actions,
getters
}

接着再导入注册user板块就大功告成:

import user from './modules/user'
const store = new Vuex.Store({
modules: {
user
}
})

3.直接使用模块中的数据

当使用 Vuex 存储数据时,即使将数据拆分到不同的模块中,实际上子模块的状态仍然会被挂载在根级别的状态下,并且属性名就是模块名。

(1)方式一:直接通过模块名访问

你可以使用 $store.state.模块名.xxx 的方式直接访问模块中的数据。

(2)方式二:mapState

mapState 映射根级别的状态:mapState(['xxx'])
映射子模块的状态:子模块需要开启命名空间namespaced:true,使用mapState('模块名', ['xxx'])进行访问。

export default {
namespaced: true,
state,
mutations,
actions,
getters
}

4.使用模块中getters的数据

(1)方式一:直接通过模块名访问

你可以使用$store.getters['模块名/xxx '] 的方式直接访问

(2)方式二:mapGetters

mapGetters 映射根级别的状态:mapGetters([ 'xxx' ])
映射子模块的状态:子模块需要开启命名空间,使用mapGetters('模块名', ['xxx'])进行访问。

5.调用模块中的mutation

(1)方式一:直接调用

你可以直接通过 store 调用: $store.commit('模块名/xxx ', 额外参数)

(2)方式二:mapMutation

mapMutations 映射根级别的状态:mapMutations([ 'xxx' ])
映射子模块的状态:子模块需要开启命名空间,通过mapMutations('模块名', ['xxx']))调用。

6.调用模块中的actions

(1)方式一:直接调用

你可以直接通过 store 调用: $store.dispatch('模块名/xxx ', 额外参数)

(2)方式二:mapAction

mapActions 映射根级别的状态:mapActions([ 'xxx' ])
映射子模块的状态:子模块需要开启命名空间,通过mapActions('模块名', ['xxx']))调用。

六、总结

vuex的前四大核心概念:state、mutations、getters和actions都有自己的“mapxxx”函数,它都是把其本身的方法提取出来,以映射在组件的方式访问(state和getters是映射在computed中)或者调用(mutations和actions映射在methods中)。
最后的一个核心概念是modules,它存在的意义在于对跟级别的store进行分包管理。
关系图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/416396.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

了解GPT:ChatGPT的终极指南

在人工智能&#xff08;AI&#xff09;的世界里&#xff0c;有一颗冉冉升起的新星正在革命性地改变我们与机器的交互方式&#xff1a;ChatGPT。在本文中&#xff0c;我们将深入研究什么是ChatGPT&#xff0c;为什么底层技术GPT如此强大&#xff0c;以及它是如何实现其卓越功能的…

马尔可夫决策过程

马尔可夫决策过程 马尔可夫过程马尔可夫性值马尔科夫过程 马尔可夫奖励过程回报与价值函数贝尔曼方程 马尔可夫决策过程策略马尔科夫决策过程中的价值函数状态价值函数和动作价值函数的 关系 贝尔曼期望方程最优价值函数最优策略寻找最优策略贝尔曼最优方程 马尔可夫过程 马尔…

Jenkins配置在远程服务器上执行shell脚本(两种方式)

Jenkins配置在远程服务器上执行shell脚本 方式一&#xff1a;通过SSH免密方式执行 说明&#xff1a;Jenkins部署在ServerA&#xff1a;10.1.1.74上&#xff0c;要运行的程序在ServerB&#xff1a;10.1.1.196 分两步 第一步&#xff1a;Linux Centos7配置SSH免密登录 Linux…

T - SQL使用事务 及 在Winform使用事务

事务适用场景 1 事务使用在存储过程中&#xff0c;直接在数据库中进行编写 2 事务使用在Winfrom项目中 SQl&#xff1a;使用事务转账操作的实例 一般都会找一个变量记录错误的个数&#xff0c;error记录上一句sql的错误和错误编号 declare errornum int 0 -- 定义…

Linux系统安装使用nginx

1.编译安装Nginx服务 (1)关闭防火墙&#xff0c;将安装nginx所需要软件包传到/opt目录下 systemctl stop firewalld systemctl disable firewalld setenforce 0 将压缩包传入到/opt目录下 cd /opt wget http://nginx.org/download/nginx-1.18.0.tar.gz (2). 安装依赖…

【MATLAB】ICEEMDAN_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 ICEEMDAN是指“改进的完全扩展经验模态分解与自适应噪声”&#xff08;Improved Complete Ensemble Empirical Mode Decomposition with Adaptive Noise&#xff09;&#xff0c;它是CEEM…

Constructor构造方法

在我们创建实例时&#xff0c;我们经常需要同时初始化这个实例&#xff0c;例如&#xff1a; Person ming new Person(); ming.setName("卫什么"); ming.setAge("18"); 这样需要三行代码&#xff0c;实际上&#xff0c;在我们创建实例时&#xff0c;是通过…

MATLAB环境下脑电信号EEG的谱分析

脑电信号一直伴随着人类的生命&#xff0c;脑电波是脑神经细胞发生新陈代谢、离子交换时细胞群兴奋突触电位总和&#xff0c;脑电信号的节律性则和丘脑相关&#xff0c;含有丰富的大脑活动信息。通常我们所接触的脑电图都是头皮脑电图&#xff0c;在有些特殊场合还需要皮下部位…

ad18学习笔记十六:如何放置精准焊盘到特定位置,捕抓功能的讲解

网上倒是一堆相关的指导 AD软件熟练度提升&#xff0c;如何设置板框捕捉&#xff1f;_哔哩哔哩_bilibili 关于Altium Designer 20 的捕抓功能的讲解_ad捕捉设置-CSDN博客 AD软件捕捉进阶实例&#xff0c;如何精确的放置布局元器件&#xff1f;_哔哩哔哩_bilibili AD绘制PCB…

学习阶段单片机买esp32还是stm32?

学习阶段单片机买esp32还是stm32? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「stm32的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xf…

【InternLM 实战营笔记】LMDeploy 的量化和部署

环境配置 vgpu-smi 查看显卡资源使用情况 新开一个终端执行下面的命令实时观察 GPU 资源的使用情况。 watch vgpu-smi复制环境到我们自己的 conda 环境 /root/share/install_conda_env_internlm_base.sh lmdeploy激活环境 conda activate lmdeploy安装依赖库 # 解决 Modu…

深度测试:指定DoC ID对ES写入性能的影响

在[[使用python批量写入ES索引数据]]中已经介绍了如何批量写入ES数据。基于该流程实际测试一下指定文档ID对ES性能的影响有多大。 一句话版 指定ID比不指定ID的性能下降了63%&#xff0c;且加剧趋势。 以下是测评验证的细节。 百万数据量 索引默认使用1分片和1副本。 指定…

JVM(3)

垃圾回收(GC)相关 在C/C中,当我们使用类似于malloc的内存开辟,还需要手动释放内存空间,这样的机制在使用时给我们造成了诸多不便,但在Java中,有垃圾回收这样的机制,这就是指:我们不再需要手动释放,程序会自动判定,某个内存空间是否可以继续使用,如果内存不使用了,就会自动释放…

Hack The Box-Fawn

目录 TASK 1 TASK 2 TASK 3 TASK 4 TASK 5 TASK 6 TASK 7 TASK 8 TASK 9 TASK 10 TASK 11 SUBMIT FLAG TASK 1 What does the 3-letter acronym FTP stand for?File Transfer Protocol (文件传输协议 FTP)TASK 2 Which port does the FTP service listen on usual…

腾讯云优惠券领取入口、云服务器优惠、领取方法及使用教程

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

国产新能源车确立全球领先地位 珠光材料等上游产业链亦乘风而起

农历新年伊始&#xff0c;中国新能源汽车的老大哥比亚迪率先开启了一波降价狂潮&#xff0c;比亚迪秦PLUS荣耀版、驱逐舰05荣耀版正式上市&#xff0c;相较于上一版本冠军版车型&#xff0c;两款新版本车型价格均下降了2万元至7.98 万元起售&#xff0c;堪称王炸出牌。当天&…

Python教程59:海龟画图turtle满屏飘字(飞雪连天射白鹿,笑书神侠倚碧鸳)

---------------turtle源码集合--------------- Python教程91&#xff1a;关于海龟画图&#xff0c;Turtle模块需要学习的知识点 Python教程51&#xff1a;海龟画图turtle画&#xff08;三角形、正方形、五边形、六边形、圆、同心圆、边切圆&#xff0c;五角星&#xff0c;椭…

Java核心API-反射

反射 文章目录 反射前言一、反射概念二、反射与Class类获取Class对象方式 三、反射访问构造方法1、获取包名2、获取类名3、获取父类名称4、获取接口5、获取类中构造方法1&#xff09;获取所有的构造方法2&#xff09;获取public修饰的构造方法3&#xff09;获取private修饰的构…

基于java SSM springboot动物检疫信息管理系统设计和实现

基于java SSM springboot动物检疫信息管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末…

AI:145-智能监控系统下的行人安全预警与法律合规分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…