当前位置: 首页 > news >正文

3.2Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3框架-企业级应用- Vuex

Vuex简介

Vuex概述

Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规

则保证状态以一种可预测的方式发生变化.

试想这样的场景, 比如一个Vue的根实例下面有一个根组件名为App.vue, 它下面有两个子组件A.vue和B.vue,

App.vue想要与A.vue或者B.vue通讯可以通过props传值的方式, 但是如果A.vue和B.vue之间的通讯就很麻烦了, 他

们需要共有的父组件通过自定义事件进行实现, A组件想要和B组件通讯往往是这样的:

  1. A组件说: "报告老大, 能否帮我托个信给小弟B" => dispatch一个事件给App

  2. App老大说: "包在我身上, 它需要监听A组件的dispatch的事件, 同时需要broadcast一个事件给B组件"

  3. B小弟说: "信息已收到", 它需要on监听App组件分发的事件

这只是一条通讯路径, 如果父组件下有多个子组件, 子组件之间通讯的路径就会变的很繁琐, 父组件需要监听大量的

事件, 还需要负责分发给不同的子组件, 很显然这并不是我们想要的组件化的开发体验。

Vuex就是为了解决这一问题出现的,它相当于提供了一个共享数据存储区域。

如何在Vue-cli中引入Vuex

在创建Vue-cli工程时,选择添加Vuex模块,就可以在工程中引入Vuex模块了。

在src文件夹中会出现一个store文件夹,此文件夹中有一个index.js文件,这就是Vuex模块的js文件。

import { createStore } from 'vuex' 
// Vuex 数据管理框架 
export default createStore({ 
state: { 
}, 
getters: { 
}, 
mutations: { 
}, 
actions: { 
}, 
modules: { 
} 
})

在main.js文件中,就会自动添加导入store模块和加载store模块的代码

import { createApp } from 'vue' 
import App from './App.vue' 
import router from './router' 
import store from './store' 
createApp(App).use(store).use(router).mount('#app')

Vuex的使用

Vuex中有五个默认的基本对象:
state: state就是Vuex中的公共的状态, 可以将state看作是全局唯一的共享数据仓库。
类似Vue中的data。(state是所以组件共享的;data是某个组件独有的。)
getters: state 的计算属性,类似Vue中的computed 计算属性。
mutations:声明方法,用于修改state。类似Vue中的mothods方法。(只能修改同步数据)。 
actions:声明方法,用于修改state。类似Vue中的mothods方法。(可以修改异步数据)。比如调用api接 
口都在这里完成。 
modules:store的子模块,只在开发大型项目的时候会用的上。

思考:state用于存储共享数据,是非常容易理解的。但是,getters、mutations、actions等是做什么用的,有 什么必要吗?

state的使用

1.在store文件夹下的index.js文件中写入如下代码:

import { createStore } from 'vuex' 
export default createStore({ 
state: { 
num: 10 
}, 
getters: { 
}, 
mutations: { 
}, 
actions: { 
}, 
modules: { 
} 
})

2.在两个组件中都添加如下代码:

<template> 
<div> 
<div>这是Home {{$store.state.num}}</div> 
</div> 
</template> 
<script> 
export default { 
created(){ 
console.log(this.$store.state.num); 
} 
} 
</script>

两个组件中都会获取state中的数据

我们也可以对state数据进行修改。

<template> 
<div> 
<div>这是Home {{$store.state.num}}</div> 
<button @click="change">change</button> 
</div> 
</template> 
<script> 
export default { 
created(){ 
console.log(this.$store.state.num); 
}, 
methods:{ 
change(){ 
this.$store.state.num = 20; 
} 
} 
} 
</script> 

上面代码有什么问题吗?

在HomeView.vue文件中,我们通过一个方法修改了state数据。此时我们会发现,其他组件中的state数据也

随之改变了。

这是必然的,因为state本来就是所有组件的共享数据。此时问题就出来了。

如果共享数据可以被任何一个组件随意修改的话,此数据将变得非常不安全。

现在我们知道了,为了保证state共享数据的安全,Vuex不希望在某个组件中随意的修改数据,而是希望对共享数

据的修改都集中在Vuex中,这样才能监控共享数据的修改,保证它的安全。

getters、mutations、actions这些对象的作用就在于此。

getters的使用

1.在store文件夹下的index.js文件中写入如下代码:

import { createStore } from 'vuex' 
export default createStore({ 
state: { 
num: 10 
}, 
getters: { 
newnum(state){ 
return state.num + 10; 
} 
}, 
... 
})

2.在组件中添加如下代码:

... 
<h1>{{$store.getters.newnum}}</h1> 
...

组件中就会获取getters中的数据。

mutations的使用

1.在store文件夹下的index.js文件中写入如下代码:

import { createStore } from 'vuex' 
export default createStore({ 
state: { 
num: 10 
}, 
getters: { 
newnum(state){ 
return state.num + 10; 
} 
}, 
mutations: { 
addMethod(state,param){ 
state.num += param; 
} 
}, 
actions: { 
}, 
modules: { 
} 
})

2.在组件中添加如下代码:

<template> 
<div> 
<div>这是Home {{$store.state.num}}</div> 
<button @click="change">change</button> 
</div> 
</template> 
<script> 
export default { 
methods:{ 
change(){ 
this.$store.commit('addMethod',6);
} 
} 
} 
</script>

想要访问Vuex中mutations中的方法,需要使用commit方法。此方法有两个参数。

第一个参数:要执行mutations中的方法名。

第二个参数:给执行mutations中的方法传递的参数。

注意:必须要经过commit才能触发 mutation 。

actions的使用

1.在store文件夹下的index.js文件中写入如下代码:

import { createStore } from 'vuex' 
export default createStore({ 
state: { 
num: 10 
}, 
getters: { 
newnum(state){ 
return state.num + 10; 
} 
}, 
mutations: { 
addMethod(state,param){ 
state.num += param; 
} 
}, 
actions: { 
addMethod(state,param){ 
//这里使用setTimeout模拟异步方法 
setTimeout(()=>{ 
state.commit('addMethod',param); 
},3000); 
} 
}, 
modules: { 
} 
})

2.在组件中添加如下代码:

<template> 
<div> 
<div>这是Home {{$store.state.num}}</div> 
<button @click="change">change</button>
</div> 
</template> 
<script> 
export default { 
methods:{ 
change(){ 
//this.$store.commit('addMethod',6); 
this.$store.dispatch('addMethod',6); 
} 
} 
} 
</script>

想要访问Vuex中mutations中的方法,需要使用dispatch方法。此方法有两个参数。

第一个参数:要执行actions中的方法名。

第二个参数:给执行actions中的方法传递的参数。

总结

现在对Vuex中的state、getters、mutations、actions做一下总结:

  1. state:存放全局共享数据。使用形式:$store.state.num

  2. getters:计算属性。使用形式:$store.getters.newnum

  3. mutations:处理同步数据的方法。使用形式:$store.commit('addMethod',6);

  4. actions:处理异步数据的方法。使用形式:$store.dispatch('addMethod',6);

先使用 $store.dispatch('addMethod',6); 的方式调用Vuex中的actions。

actions再使用commit方法调用Vuex中的mutations;

相关文章:

3.2Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3框架-企业级应用- Vuex

Vuex简介 Vuex概述 Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规 则保证状态以一种可预测的方式发生变化. 试想这样的场景, 比如一个Vue的根实例下面有一个根组件名为App.vue, 它下面有两个子组件A.vue和B.vu…...

整合 Java, Python 和 Scrapy 爬虫以传递和使用参数

这篇博客将详细说明如何从 Java 应用程序调用一个 Python 脚本&#xff0c;并在此过程中传递参数给一个 Scrapy 爬虫。最终目标是让 Java 控制爬虫的行为&#xff0c;如爬取数量和特定的运行参数。 一、Scrapy 爬虫的修改 首先&#xff0c;我们需要确保 Scrapy 爬虫能接收从命…...

Android 蓝牙实战——蓝牙音乐播放进度(二十)

对于蓝牙音乐的开发来说,播放进度是一个比较重要的数据参数,这里我们就来分析一下蓝牙音乐播放进度的相关回调。 一、回调流程 1、AvrcpControllerService 源码位置:/packages/apps/Bluetooth/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java /…...

SQL注入实例(sqli-labs/less-1)

初始网页 从网页可知传递的参数名为 id&#xff0c;并且为数字类型 1、得知数据表有多少列 1.1 使用联合查询查找列数&#xff08;效率低&#xff09; http://localhost/sqli-labs-master/Less-1/?id1 union select 1,2 -- 1.2 使用order by查找列数&#xff08;效率高&…...

Python中tkinter编程入门3

在使用tkinter创建了窗口之后&#xff0c;可以将一些控件“放置”到窗口中。这些控件包括标签、按键以及输入框等。 1 在窗口中“放置”标签 在窗口中“放置”标签主要有两个步骤&#xff0c;一是创建标签控件&#xff0c;二是将创建好的标签“放置”到窗口上。 1.1 创建标签…...

XMind 2023 v23.05.2660软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; XMind 2023 v23.05.2660被视为顶尖思维导图软件&#xff0c;其界面简洁清爽&#xff0c;功能布局直观简单&#xff0c;摒弃繁复不实。尽管体积小巧&a…...

docker compose kafka集群部署

kafka集群部署 目录 部署zookeeper准备工作2、部署kafka准备工作3、编辑docker-compose.yml文件4、启动服务5、测试kafka6、web监控管理 部署zookeeper准备工作 mkdir data/zookeeper-{1,2,3}/{data,datalog,logs,conf} -p cat >data/zookeeper-1/conf/zoo.cfg<<EOF…...

最新版在线客服系统源码

源码介绍 首发最新在线客服系统源码&#xff0c;优化更好并且重构源码布局UI 性能不吃cpu并发快,普通1H2G都能带动最新版只要是服务器都能带动 搭建即可使用,操作简单,易懂 修复了老版本bug 内附有搭建教程 gofly.v1kf.com 运行环境 Nginx 1.20 MySQL 5.7 演示截图...

【比邻智选】MR880A模组

&#x1f680;高性价比&#xff0c;5G/4G双模&#xff0c;稳定可靠 &#x1f310;功能丰富&#xff0c;5G特性一应俱全 &#x1f9e9;多封装兼容&#xff0c;适配性强&#xff0c;灵活升级智能设备...

超大文件去除重复数据

背景 一个超大200万行文件 第一列是文件名 第二列是文本 第一列有重复的文件名 如何删除重复的文件名和对应的文本 awk ‘!seen[$1]’ 使用一些命令行工具来处理大文件&#xff0c;如awk、sed、grep等。 使用awk命令来去除重复行&#xff1a; bash awk !seen[$1] your_file.…...

ICode国际青少年编程竞赛- Python-4级训练场-列表综合练习

ICode国际青少年编程竞赛- Python-4级训练场-列表综合练习 1、 Flyer[3].step(1) Flyer[7].step(2) Flyer[11].step(1) for i in range(4):Flyer[i * 2].step(1) Flyer[8].step(3)for i in range(3):Dev.turnRight()Dev.step(-5)2、 for i in range(5):Flyer[i5].step(Flyer[…...

苹果电脑怎么安装crossover 如何在Mac系统中安装CrossOver CrossOver Mac软件安装说明

很多Mac的新用户在使用电脑的过程中&#xff0c;常常会遇到很多应用软件不兼容的情况。加上自己以前一直都是用Windows系统&#xff0c;总觉得Mac系统用得很难上手。 其实&#xff0c;用户可以在Mac上安装CrossOver&#xff0c;它支持用户在Mac上运行Windows软件&#xff0c;例…...

C++学习————第十天(string的基本使用)

1、string 对象类的常见构造 (constructor)函数名称 功能说明&#xff1a; string() &#xff08;重点&#xff09; 构造空的string类对象&#xff0c;即空字符串 string(const char* s) &#xff08;重点&#xff09;…...

华为OD介绍

概念 华为OD是华为提出的一种新的用工方式&#xff0c;其全称是Outsourcing Dispacth&#xff0c;也可以简写为ODP&#xff0c;是华为和北京外企德科人力资源服务上海有限公司联合招聘的简称。华为OD岗位属于华为外包员工的一种&#xff0c;仅限于软件研发类岗位&#xff0c;类…...

判断点在多边形内部

0. 介绍 网上资料很多&#xff0c;只简单介绍下&#xff0c;方便自己今后的理解。 1. 射线法 从该点引一条射线出来&#xff0c;如果和多边形有偶数个交点&#xff0c;则点在多边形外部。 因为有入必有出&#xff0c;所以从外部引进来的射线一定是交多边形偶数个点。 如图…...

livox雷达斜装修改

fast_lio中的mid360.yaml中的外参 extrinsic_est_en: false # true: enable the online estimation of IMU-LiDAR extrinsicextrinsic_T: [ -0.011, -0.02329, 0.04412 ]extrinsic_R: [ 1, 0, 0,...

【Spring】初识 Spring AOP(面向切面编程)

目录 1、介绍AOP 1.1、AOP的定义 1.2、AOP的作用 1.3、AOP的核心概念及术语 2、AOP实现示例 3、EnableAspectJAutoProxy注解 1、介绍AOP 1.1、AOP的定义 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;直译过来就是面向切面编程&#xff0c;AOP 是一…...

k8s各个组件的作用

Kubernetes&#xff08;K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化计算机容器化应用程序的部署、扩展和管理。以下是 Kubernetes 中的关键组件及其作用&#xff1a; API 服务器&#xff08;API Server&#xff09;&#xff1a; 作为集群中所有资源操作的入…...

Spring Cloud 整合Sentinel

1、引入依赖 版本说明 alibaba/spring-cloud-alibaba Wiki GitHub 父pom <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>Sentinel应用直接引用starter <…...

Java入门基础学习笔记4——开发Helloworld入门程序

Java程序开发的三个步骤&#xff1a; 1&#xff09;编写代码 2&#xff09;编译代码 3&#xff09;运行代码 注意事项&#xff1a; 第一个java程序建议使用记事本来编写。 建议代码文件名全英文、首字母大写、满足驼峰模式&#xff0c;源代码文件的后缀必须是.java 注意&a…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...