一篇文章学懂Vuex
一、基于VueCli自定义创建项目
233
344

二、Vuex 初始准备
建项目的时候把vuex勾选上就不用再yarn add vuex@3了

store/index.js
// 这里面存放的就是vuex相关的核心代码
import Vuex from 'vuex'
import Vue from 'vue'// 插件安装
Vue.use(Vuex)// 创建仓库(空仓库)
const store = new Vuex.Store()// 到处给main.js使用
export default store
App.vue
created () {// console.log(this.$router) // 没配console.log(this.$store) // 没配},
main.js
import Vue from 'vue'
import App from './App.vue'
import store from '@/store/index'
console.log(store.state.count)Vue.config.productionTip = falsenew Vue({render: h => h(App),store
}).$mount('#app')
三、通过vuex仓库访问数据

(1)通过store直接访问
新建仓库数据,这样别的模块、组件都可以访问到仓库中的数据。
// 创建仓库(空仓库)
const store = new Vuex.Store({// 通过state可以提供数据,所有组件共享的数据state: {title: '大标题',count: 100}
}
)
例如,App.vue中的模块中(指的是template中)
<h1>根组件--{{ $store.state.title }}--{{ $store.state.count }}</h1>
App.vue中的组件中(指的是script中)
created () {console.log(this.$store.state.count) // 没配},
Son.vue(模块template中)
从vuex中获取的值: <label>{{ $store.state.count }}</label>
main.js(js中)
console.log(store.state.count)
总结:只需要在App.vue中写好仓库,后面可以直接通过底层的逻辑去调用,即:
模板中:{{$store.state.xxx }}
组件逻辑中:this.$store.state.xxx
JS模块中:store.state.xxx
Son1.vue
<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button>值 + 1</button></div>
</template><script>
export default {name: 'Son1Com'
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>
(2)通过辅助函数(简化)
mapState是辅助函数,帮助我们把store中的数据自动映射到组件的计算属性中

App.vue
//展示一下 不用
import { mapState } from 'vuex'
console.log(mapState(['count', 'title']))
在App.vue中这么写,就可以直接调用使用里面的值
<template><div id="app"><h1>根组件--{{ title }}--{{ count }}</h1><input type="text"><Son1></Son1><hr><Son2></Son2></div>
</template>computed: {...mapState(['count', 'title'])},
Son2.vue,虽然写起来简单还是需要再写一遍解构函数,即 computed: {
...mapState(['count', 'title'])
}
<template><div class="box"><h2>Son2 子组件 {{ title }}</h2>从vuex中获取的值:<label>{{ count }}</label><br /><button>值 - 1</button></div>
</template><script>
import { mapState } from 'vuex'
export default {name: 'Son2Com',computed: {...mapState(['count', 'title'])}
}
</script><style lang="css" scoped>
.box {border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>
四、组件修改仓库中的数据
(1)错误情况

<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd">值 + 1</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd () {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>
(2)严格模式 strict:true
为了避免这种情况,方便初学者检查,我们采用严格模式。store/index.js中操作
// 这里面存放的就是vuex相关的核心代码
import Vuex from 'vuex'
import Vue from 'vue'// 插件安装
Vue.use(Vuex)// 创建仓库(空仓库)
const store = new Vuex.Store({// 严格模式(有利于初学者,检测不规范的代码 => 上线时需要关闭)// 其实还是可以修改,只是会提示报错strict: true,// 通过state可以提供数据,所有组件共享的数据state: {title: '大标题',count: 100}
}
)// 到处给main.js使用
export default store
(3)修改数据-mutations

store/index.js
// 这里面存放的就是vuex相关的核心代码
import Vuex from 'vuex'
import Vue from 'vue'// 插件安装
Vue.use(Vuex)// 创建仓库(空仓库)
const store = new Vuex.Store({// 严格模式(有利于初学者,检测不规范的代码 => 上线时需要关闭)// 其实还是可以修改,只是会提示报错strict: true,// 1.通过state可以提供数据,所有组件共享的数据state: {title: '大标题',count: 100},// 2.通过mutations可以提供修改数据的方法,mutation是一个对象mutations: {// 所有的mutation函数,第一个参数,都是stateaddCount (state) {// 修改数据state.count += 1},addFive (state) {// 修改数据state.count += 5},changeTitle (state) {state.title = '小标题'}}}
)// 到处给main.js使用
export default store
Son1.vue
<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd">值 + 1</button><button @click="addFive">值 + 5</button><button @click="changeFn">改标题</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd () {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改数据// 需要提交调用mutationthis.$store.commit('addCount')},addFive () {this.$store.commit('addFive')},changeFn () {this.$store.commit('changeTitle')}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>
(4)mutations传参

index.js
// 2.通过mutations可以提供修改数据的方法,mutation是一个对象mutations: {// 所有的mutation函数,第一个参数,都是state// addCount (state) {// // 修改数据// state.count += 1// },addCount (state, n) {// 修改数据state.count += n},changeTitle (state, newTitle) {state.title = newTitle}}
Son.vue
<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd(1)">值 + 1</button><button @click="handleAdd(5)">值 + 5</button><button @click="handleAdd(10)">值 + 10</button><button @click="changeFn">改标题</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd (n) {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改数据// 需要提交调用mutation// this.$store.commit('addCount')this.$store.commit('addCount', n)console.log(n)},changeFn (newTitle) {this.$store.commit('changeTitle', '黑马程序员')}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>
(5)mutations传多参
只能传递有且仅有一个参数,如果是想传递多个参数,可以写成对象数组的形式。
Son1.vue
<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd(1)">值 + 1</button><button @click="handleAdd(5)">值 + 5</button><button @click="handleAdd(10)">值 + 10</button><button @click="changeFn">改标题</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd (n) {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改数据// 需要提交调用mutation// this.$store.commit('addCount')// this.$store.commit('addCount', n)// 只能传递有且仅有一个参数,如果是想传递多个参数,可以写成对象数组的形式。this.$store.commit('addCount', {count: n,msg: '哈哈'})console.log(n)},changeFn (newTitle) {this.$store.commit('changeTitle', '黑马程序员')}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>
index.js
// 2.通过mutations可以提供修改数据的方法,mutation是一个对象mutations: {addCount (state, obj) {// 修改数据state.count += obj.count}
}
)

(6)实时输入,实时更新
不能用:value 因为不能直接改变仓库的值,但是:value是由:value和@input组成,所以可以分开用
相关文章:
一篇文章学懂Vuex
一、基于VueCli自定义创建项目 233 344 二、Vuex 初始准备 建项目的时候把vuex勾选上就不用再yarn add vuex3了 store/index.js // 这里面存放的就是vuex相关的核心代码 import Vuex from vuex import Vue from vue// 插件安装 Vue.use(Vuex)// 创建仓库(空仓库…...
DeepSeek 助力 Vue 开发:打造丝滑的二维码生成(QR Code)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
选择排序:简单高效的选择
大家好,今天我们来聊聊选择排序(Selection Sort)算法。这是一个非常简单的排序算法,适合用来学习排序的基本思路和操作。选择排序在许多排序算法中以其直观和易于实现的特点著称,虽然它的效率不如其他高效算法…...
图像处理篇---图像处理中常见参数
文章目录 前言一、分贝(dB)的原理1.公式 二、峰值信噪比(PSNR, Peak Signal-to-Noise Ratio)1.用途2.公式3.示例 三、信噪比(SNR, Signal-to-Noise Ratio)1.用途2.公式3.示例 四、动态范围(Dyna…...
【Java】—— 二叉树
一、树型结构 树形结构是一种重要的数据结构,它类似于现实生活中的树的结构,由结点和边构成。树形结构具有以下特点: 树形结构是一种层次化的结构,由根结点、内部结点和叶子结点组成。根结点是树的顶部结点,没有父结点…...
C++....................4
1. using namespace std; class mystring { private:char* p;int len;// 辅助函数:复制字符串void copy(const char* source) {len strlen(source);p new char[len 1];strcpy(p, source);}// 辅助函数:释放内存void release() {if (…...
机场导航系统有哪些功能?精准定位与高效路径规划技术深度剖析
本文专为关注机场服务优化、乘客体验提升的IT技术员及航空业同仁而写。将深入探讨机场室内导航系统的核心功能,旨在解决乘客在机场内部定位、路径规划、服务寻找等方面的痛点。如需获取机场导航系统解决方案可前往文章最下方获取,如有项目合作及技术交流…...
医疗AI领域中GPU集群训练的关键技术与实践经验探究(上)
医疗AI领域中GPU集群训练的关键技术与实践经验探究(上) 一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗 AI 作为人工智能技术与医疗领域深度融合的产物,正引领着医疗行业的深刻变革。近年来,医疗 AI 在疾病诊断、药物研发、健康管理等诸多方面取得了显著进展,…...
STM32-智能小车项目
项目框图 ST-link接线 实物图: 正面: 反面: 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 一、让小车动起来 新建文件夹智能小车项目 在里面复制19-串口打印功能 重命名为01-让小车动起来 新建文件夹motor&…...
Qt基础之四十九:Qt属性系统(Property System)
Qt提供了一个复杂的属性系统,类似于一些编译器供应商提供的属性系统。然而,作为一个独立于编译器和平台的库,Qt不依赖于__property或[property]等非标准编译器功能。Qt解决方案适用于Qt支持的每个平台上的任何标准C++编译器。它基于元对象系统(Meta-Object System),该系统…...
Java 中的泛型讲解与使用(超全详解)
Java 中的泛型(超全详解) 在 Java 编程中,泛型是一种强大的特性,它允许我们编写可以处理多种数据类型的代码,从而提高代码的复用性和安全性。本文将对 Java 中的泛型进行超全详解,包括泛型的基本概念、基本…...
星环科技推出DeepSeek全场景解决方案:即开即用、企业级部署、端侧智能三位一体
星环科技(688031.SH)正式发布DeepSeek全场景解决方案,全面覆盖个人用户、企业客户及行业场景需求,为用户提供从个人到企业、从云端到本地的全方位AI应用支持,为不同需求的用户提供了灵活、高效且安全的AI解决方案。 省…...
《全星质量管理 QMS 软件系统》:赋能企业高效质量管理
《全星质量管理 QMS 软件系统》:赋能企业高效质量管理 在当今竞争激烈的商业环境中,《全星质量管理 QMS 软件系统》脱颖而出,展现出了显著且无可比拟的应用优势。 首先,《全星质量管理 QMS 软件系统》犹如一张严密的质量管控大网…...
[分披萨]
分批萨 真题目录: 点击去查看 E 卷 100分题型 题目描述 "吃货"和"馋嘴"两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。但是粗心的服务员将披萨切成了每块大小都完全不同奇数块,且肉眼能分辨出大小。 由于两…...
【CSS】HTML元素布局基础总结
HTML默认布局和元素显示 CSS 元素显示 { HTML 默认布局: 流式布局 { 从左到右,从上到下 随页面宽度变化动态排列元素 文档流:整个 H T M L 文档的流式布局 HTML 元素分为 { 块级元素 :默认占满一行 行内元素 :在行内最…...
JSON Web Token在登陆中的使用
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传递声明。它的主要用途是身份验证和信息交换。在微服务架构中,JWT 作为认证机制非常常见,特别是与 API 网关结合使用…...
吐血整理:在 Docker 中运行 Milvus
直接用docker 错误命令(这个我试了三遍,浪费了很多时间): docker run -d --name milvus -p 19530:19530 -p 9091:9091 -v /var/lib/milvus:/var/lib/milvus milvusdb/milvus:latest 先看报错: 2025-02-24 16:02:39 …...
【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】
最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…...
C++Qt学习笔记——实现一个串口通信界面
CQt学习笔记——实现一个串口通信界面 一.界面二、项目结构三、头文件1. 文件头部2. 类定义3. 构造函数和析构函数4. 成员函数5. 成员变量 四、代码解析ReceiveAeraInit 函数解析SerialHelper 构造函数解析1. 为什么有两个 SerialHelper?2. 为什么用 :: 和 :&#x…...
Word(2010)排版技巧
设置标题样式 选择需要设置的标题 如下图所示。选择文字后,点击对应的样式即可设置。 设置标题格式 设置字体格式 设置段落格式 显示所有样式 标题样式展示 建议 建议新建一个正文样式,可以命名为正文1,因为所有的样式参考的“样式基准…...
一.Vue中的条件渲染
1.在<head>中引用 <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> 2.在<body>中写入 <div id"app"><p><a v-if "user.usernameadmin"href"#">编辑</a><a …...
IO进程 day05
IO进程 day05 9. 进程9. 9. 守护进程守护进程的特点守护进程创建步骤 10. 线程10.1. 线程的概念10.2. 进程和线程的区别10.2. 线程资源10.3. 线程的函数接口1. pthread_create-创建线程线程函数和普通函数的区别 2. pthread_exit3.线程资源回收函数join和detach的区别 获取线程…...
【HeadFirst系列之HeadFirstJava】第6天之认识Java的API:解锁高效开发的钥匙
认识Java的API:解锁高效开发的钥匙 在《Head First Java》的第六章节中,作者深入探讨了Java的API(Application Programming Interface),并强调了它在Java开发中的重要性。Java API 是Java开发工具包(JDK&a…...
4 - AXI GPIO按键控制LED实验
文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验任务是通过调用PL端AXI GPIO IP核,使用中断机制,实现PL端按键控制 PS端LED的功能。 2 系统框图 3 软件设计 注意事项: AXI GPIO IP核是双沿触发中断,不可设置&…...
题海拾贝:扫雷
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞,关注! 1、题…...
Deepseek本地部署小实践(c盘)
目录 前言 一、安装ollama 二、打开终端执行run 三、可视化 前言 小鲸鱼出来以后看到很多大佬本地部署AI,自己也想试一试,第一次部署AI,选了一个简单的办法,实践一下,写得比较粗糙。 一、安装ollama 先简单的介绍…...
详细解析d3dx9_27.dll丢失怎么办?如何快速修复d3dx9_27.dll
运行程序时提示“d3dx9_27.dll文件缺失”,通常由DirectX组件损坏或文件丢失引起。此问题可通过系统化修复方法解决,无需重装系统或软件。下文将详细说明具体步骤及注意事项。 一.d3dx9_27.dll缺失问题的本质解析 当系统提示“d3dx9_27.dll丢失”时&…...
【LeetCode刷题之路】leetcode155.最小栈
LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…...
矩阵乘积态简介
定义 矩阵乘积态(Matrix Product State, MPS)是一种用于表示量子多体系统的强大工具,特别是在一维系统中。MPS 是一种张量网络状态,它通过将全局量子态分解为一系列局部张量的乘积来有效地表示量子态。 注释: 量子态表…...
Oracle数据库分区自动删除
说明: 该存储过程部署后,设置成定时任务,每天执行。 每次执行删除partition_position 2的分区,删除之后,partition_position 3的分区会前移到partition_position 为 2; CREATE OR REPLACE PROCEDURE BILL_CENT_JI…...
