认识和使用Vuex-案例

  1. 集中管理共享的数据,易于开发和后期维护;
  2. 能够高效的实现组件之间的数据共享,提高开发效率;
  3. 存储在Vuex的数据是响应式的,能够实时保持页面和数据的同步;

安装Vuex依赖包

npm install vuex --save

导入包

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)

创建store对象

const store = new Vuex.Store({state: {},mutations: {},actions:{},getters: {}
})

将store对象挂载到vue的实例中

new Vue({el: '#app',render: h => h(app),router,//将创建的共享数据对象挂载到vue的实例中,所有的组件就可以直接从store中获取全局的数据了store
})

State和Mutation

State

State提供了唯一的数据公共源,所有共享的数据都要统一放到store的state进行存储;

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {count:0, //在state中存储一个count数据},
})

访问State数据

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

由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性 (computed)中返回某个状态:

<template><div> <p>从state中拿到的{{conut}}</p><!-- 或者--><p>从state中拿到的{{$store.state.count}}</p></div>
</template><script>
export default {computed: {conut() {return this.$store.state.count}},
}
</script>
<style></style>

方式二:mapState 辅助函数

当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键:

<template><div> <p>从state中拿到的{{conut}}</p></div>
</template>//从Vuex中按需导入mapState 函数
import { mapState } from 'vuex'<script>
export default {computed: {//将全局数据映射为当前组件的计算属性...mapState (['conut'])},
}
</script>
<style></style>

Mutation

只有通过Mutation才能变更Store的数据,不能直接在组件中操作Store的数据;
在Mutation统一操作Store的数据虽然比较繁琐,但是便于集中监控所有数据的变化;
一条重要的原则就是要记住 mutation 必须是同步函数,一些异步函数我们要放到后面讲的action中处理;

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {count:0, //在state中存储一个count数据},mutations: {add(state){//变更state中的count数据state.count++}},
})

触发Mutation来改变数据

在组件中使用 this.$store.commit(‘xxx’) 提交 mutation,或者使用 mapMutations 辅助函数将组件中的 methods 映射为 store.commit 调用。

<template><div> <p>从state中拿到的{{$store.state.count}}</p><button @click = "addCount"></button></div>
</template>//从Vuex中按需导入mapMutations函数
import {mapMutations} from 'vuex'<script>
export default {methods:{// 第二种方式:将 `this.addCount()` 映射为 `this.$store.commit('add')`//...mapMutations(['add']),addCount(){//第一种方式:使用 this.$store.commit('xxx') 提交 mutationthis.$store.commit('add') }}
}
</script>
<style></style>

组件触发Mutation时传递参数

首先要在mutations中写好接受参数的函数

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {count:0, //在state中存储一个count数据},mutations: {add(state,num){//变更state中的count数据state.count += num}},
})

组件触发Mutation调用更改函数并提交参数

<template><div> s<p>从state中拿到的{{$store.state.count}}</p><button @click = "addCount"></button></div>
</template><script>
export default {methods:{addCount(){//第一种方式:使用 this.$store.commit('xxx') 提交 mutationvar num = 5this.$store.commit('add' ,num ) }}
}
</script>
<style></style>

Action

Action用于处理异步任务
如果通过异步操作变更数据,必须通过Action
,而不是使用Mutation,但是在Action中还是要通过触发Mutation的方式间接变更数据。

Action 提交的是 mutation
Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation。

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {count:0, //在state中存储一个count数据},mutations: {add(state){//变更state中的count数据state.count++}},actions:{asyncAdd(context){setTimeout(() => { //这里用定时器假设是异步操作context.commit('add') //这里还是触发mutations中的add方法更改count数据}, 1000)}}
})

简化代码

 actions:{asyncAdd({commit}){setTimeout(() => { commit('add')}, 1000)}}

触发Action中的异步函数

第一种方式:通过 this.$store.dispatch 方法触发

  methods:{addCount(){this.$store.dispatch('asyncAdd')}}

第二种方式:mapActions辅助函数

<template><div> <!-- 这里点击事件可以直接写成actions函数事件名  --><button @click = "asyncAdd"></button> </div>
</template>//从Vuex中按需导入mapActions函数
import { mapActions} from 'vuex'<script>
export default {methods: {//将指定的actions函数,映射为当前组件的methods函数...mapActions(['asyncAdd'])},
}
</script>

触发Action异步时携带参数

首先要先更改一下mutations和actions中的函数

mutations: {add(state,num){//变更state中的count数据state.count += num}
},
actions:{asyncAdd({commit},num){setTimeout(() => { commit('add',num)}, 1000)}}

然后还是通过 this.$store.dispatch 方法触发

  methods:{addCount(){var num = 5this.$store.dispatch('asyncAdd',num )}}

Getter

Getter用于对Store中的数据进行加工处理形成新的数据;

Getter可以对Store中已有的数据进行加工处理形成新的数据,类似Vue的计算属性
Store中的数据发生变化,Getter的数据也会跟着发生变化
Getter的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {count:0, //在state中存储一个count数据},getters: {newCount:state => {return  ‘最新值是’+ state.count}}
})

访问Getter的数据

第一种方式:通过 this.$store.getters方法触发

  computed:{count(){return  this.$store.getters. newCount}}

第二种方式:mapActions辅助函数

//从Vuex中按需导入mapGetters 函数
import { mapGetters } from 'vuex'<script>
export default {computed: {//将 store 中的 getter 映射到组件计算属性...mapGetters (['newCount'])},
}
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM大模型中的基础数学工具—— 信号处理与傅里叶分析

Q51: 推导傅里叶变换 的 Parseval 定理 傅里叶变换的 Parseval 定理揭示了啥关系&#xff1f; Parseval 定理揭示了傅里叶变换中时域与频域的能量守恒关系&#xff0c;即信号在时域的总能量等于其在频域的总能量。这就好比一个物体无论从哪个角度称重&#xff0c;重量始终不…

对Mac文字双击或三击鼠标左键没有任何反应

目录 项目场景&#xff1a; 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 项目场景&#xff1a; 在使用Mac系统的时候&#xff0c;使用Apple无线鼠标&#xff0c;双击左键能够选取某个单词或词语&#xff0c;三击左键能够选取某一行&#xff0c;&#xff08;百度、…

Go语言企业级项目使用dlv调试

使用dlv调试Go语言代码 打包Go代码(禁止优化和内联&#xff08;便于调试更复杂的逻辑&#xff09;)&#xff1a; go build -gcflags"all-N -l" -o xxx_api_debug.exe启动一个dlb监听可运行程序的端口&#xff1a; dlv --listen:2345 --headlesstrue --api-version…

Kafka命令行的使用/Spark-Streaming核心编程(二)

Kafka命令行的使用 创建topic kafka-topics.sh --create --zookeeper node01:2181,node02:2181,node03:2181 --topic test1 --partitions 3 --replication-factor 3 分区数量&#xff0c;副本数量&#xff0c;都是必须的。 数据的形式&#xff1a; 主题名称-分区编号。 在…

Python3:Jupyterlab 安装和配置

Python3:Jupyterlab 安装和配置 Jupyter源于Ipython Notebook项目&#xff0c;是使用Python&#xff08;也有R、Julia、Node等其他语言的内核&#xff09;进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具。 最新的基于web的交互式开发环境&#xff0c;适用于n…

快速排序及其在Unity游戏开发中的应用

一、快速排序(Quick Sort) 快速排序是一种**分治法(Divide and Conquer)**思想的排序算法,它的基本步骤是: 选一个基准元素(pivot):通常选第一个元素、最后一个元素,或者随机一个。分区(Partition):把数组分成两部分,小于等于 pivot 的放左边,大于 pivot 的放右…

【硬核干货】SonarQube安全功能

原文链接&#xff1a;【硬核干货】SonarQube安全功能 关于晓数神州 晓数神州坚持以“客户为中心”的宗旨&#xff0c;为客户提供专业的解决方案和技术服务&#xff0c;构建多引擎数字化体系。 核心业务1&#xff1a;聚焦DevOps全栈产品&#xff0c;打造需求管理、项目管理、开…

修改el-select背景颜色

修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式&#xff08;推荐&#xff09; */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…

Unity-粒子系统:萤火虫粒子特效效果及参数

萤火虫特效由两部分组成。萤火虫粒子底色粒子面片。萤火虫的旋转飞动主要由 Noise参数和Color over Lifetime模块控制。 贴图&#xff1a;中间实周边虚的圆&#xff0c;可随意自行制作 Shader&#xff1a;Universal Render Pipeline/2D/Sprite-Lit-Default 以下是粒子详细参…

K8S Service 原理、图例——深度好文

一、理论介绍 1.1、3W 法则 1、是什么&#xff1f; Service 是一种为一组功能相同的 pod 提供单一不变的接入点的资源。当 Service 存在时&#xff0c;它的IP地址和端口不会改变。客户端通过IP地址和端口号与 Service 建立连接&#xff0c;这些连接会被路由到提供该 Service 的…

Alibaba Cloud Linux 3.2104 LTS 64位 容器优化版安装docker docker compose记录

整个安装过程耗时4小时。&#xff08;包含以下检查内容:&#xff09; 检查该linux版本信息&#xff08;并通过监控指标检查运行状态/cpu占用/内存占用/磁盘读取写入IOPS /同时连接数&#xff09; 1&#xff1a;根据当前的系统进行yum与dnf的升级&#xff0c;保持稳定修复的版本…

STM32N6570-DK ISP调试

STM32N6570-DK之ISP调试应用 准备工作-下载安装软件包:一、使用STM32CubeProgrammer给板子烧入STM32N6_ISP_IQTune_App_revC01-v1.1.0-trusted.bin。二、打开STM32 ISP IQTune.exe ,出现可连接端口:三、根据教程进行相应调试:准备工作-下载安装软件包: https://www.st.co…

12.thinkphp验证

一&#xff0e;验证器定义 1. 验证器的使用&#xff0c;我们必须先定义它&#xff0c;系统提供了一条命令直接生成想要的类&#xff1b; php think make:validate User 2. 这条命令会自动在应用目录下生成一个validate文件夹&#xff0c;并生成User.php类&#xff1b; class…

OpenWrt 与 Docker:打造轻量级容器化应用平台技术分享

文章目录 前言一、OpenWrt 与 Docker 的集成前提1.1 硬件与内核要求1.2 软件依赖 二、Docker 环境部署与验证2.1 基础服务配置2.2 存储驱动适配 三、容器化应用部署实践3.1 资源限制策略3.2 Docker Compose 适配 四、性能优化与监控4.1 容器资源监控4.2 镜像精简策略 五、典型问…

EasyRTC音视频实时通话嵌入式SDK,打造社交娱乐低延迟实时互动的新体验

一、方案背景 在数字化时代&#xff0c;社交娱乐已经成为人们生活中不可或缺的一部分。随着移动互联网和智能设备的普及&#xff0c;用户对实时互动的需求越来越高。EasyRTC作为一款基于WebRTC技术的实时音视频通信解决方案&#xff0c;凭借其低延迟、高稳定性和跨平台兼容性&…

软件编程命名规范

编程命名规范是保证代码可读性、可维护性和团队协作效率的重要基础。以下是涵盖主流编程语言的通用命名规范&#xff0c;结合行业最佳实践和常见规范&#xff08;如Google、Microsoft、Airbnb等风格指南&#xff09;&#xff1a; 一、通用命名原则 清晰优先&#xff1a;名称应…

换张电话卡能改变IP属地吗?一文解读

在互联网时代&#xff0c;IP属地&#xff08;即网络定位信息&#xff09;的显示引发了许多用户的关注。有人好奇&#xff1a;更换电话卡&#xff08;SIM卡&#xff09;是否能改变自己的IP属地&#xff1f;本文将解析IP属地的定义、电话卡的作用&#xff0c;并深入探讨两者之间的…

前端:纯HTML、CSS和JS菜单样式

实现了一个多级折叠菜单系统,使用纯HTML、CSS和JavaScript(无任何框架) 一、二级菜单展开 1、实现效果 初始状态-展示全部一级菜单 选中共状态,一级标题选中共为蓝色背景色,二级标题选中共为蓝色文字,展开右侧图标为-,后缩状态右侧图标为+ 2、实现 ​​HTML结构​​ …

Centos8 安装 Docker

yum 更换国内源 1. 备份原 yum 配置 cd /etc/yum.repos.d/ mkdir backup mv *.repo backup/2. 下载新 yum 配置&#xff08;阿里源&#xff09; wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo3. 替换源中的系统版本变量 sed -…

AI测试工具Testim——告别自动化测试维护难题

随着人工智能技术的快速发展&#xff0c;AI测试工具正在成为提升软件研发效能的关键。每款AI的特性各有差异&#xff0c;今天&#xff0c;我们就给大家介绍一款专注于Web和移动应用的端到端的AI测试工具--Testim。 Testim的简介 官网地址&#xff1a;https://www.testim.io/ 简…