发布时间:2026/7/28 14:30:23
Vuex的简单使用 注以下所有截图均来自我的微信公众号“生锈的TRUENO”欢迎各位关注~Vuex是一个专为Vue.js应用程序开发的状态管理模式它采用集中式存储管理应用的所有组件的状态并以相应的规则保证状态以一种可预测的方式发生变化。每个Vue组件都由三个基本的部分组成stateviewactions其中state是驱动应用的数据源view以声明的方式将state映射到视图actions用来响应在view上的用户输入导致的状态变化。具体到一个简单的Vue组件中state可以指组件的script中的dataview可以指组件的template中对data里数据的绑定和使用actions则可以指组件的template中对于组件的script中方法的绑定。简单地说上述Vue组件中的三个部分完成了从数据到视图的渲染再到用户操作视图从而修改数据这一“单向数据流”。组件的状态随着数据流的不断运动而不断改变。这么看来貌似单个Vue组件就可以完成状态的管理那为什么还需要Vuex呢我们来举个栗子一个购物车应用当用户将想要的物品添加到购物车后需要点击付款从而跳转到另外一个页面而这个付款页面除了填写地址等信息外肯定还要有用户刚刚选中的商品信息也就是购物车中的数据。这个简单的需求涉及到了一个问题数据的跨页面传递。我们可以想一下一般来说如何实现数据的跨页面传递。1.可以把当前页面需要传递的数据放到url里在页面跳转的同时就把数据传递到新的页面了2.还可以把数据放到cookie里利用浏览器缓存让新的页面调用cookie中的数据从而实现数据的传递3.利用数据库在一个页面中修改数据后先将数据存到数据库然后在另一个页面中从数据库中对该数据进行读取。总而言之上述的方法都需要一个媒介把数据传来传去这会增加系统的不可维护性。因此Vuex为我们提供了一个统一管理多个组件共享的数据的方式我们只需要对一组共享数据进行维护然后共享这些数据的所有组件都可以对这些数据进行使用和修改这就大大提升了系统的可维护性。下面举一个简单的栗子来说明Vuex的使用方法和效果需求写一个简单的购物车功能一共两个页面一个是购物车页面用来确定商品的数目另一个是计数页面用来显示当前购物车中的商品总数。最终要实现在购物车页面修改后的商品数目可以和计数页面显示的商品总数一致的效果。先看一下应用的目录结构是我用vue-cli搭建的一个项目这个目录只显示了主要的部分其中“components”中的两个组件分别是计数组件和购物车组件router中的index.js用于设置前端路由store是Vuex的核心代码main.js是项目的入口文件。为了使用Vuex需要在入口文件main.js中引入main.js代码如下// The Vue build version to load with the import command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from vue import App from ./App import router from ./router import store from ./store//引入vuex Vue.config.productionTip false /* eslint-disable no-new */ new Vue({ el: #app, router, store,//引入vuex components: { App }, template: App/ })store是Vuex的核心代码首先来看一下state.js该文件用来定义共享数据/* 状态对象 */ export default{ totalNum:0//商品总数 }state只是实现了共享数据的定义它可以让Vue组件使用共享数据但是如果组件需要修改共享数据那就要用到mutation.js/* 直接更新state的多个方法的对象 */ export default{ changeNum(state,currentNum){ state.totalNum currentNum } }在Vuex中mutation是唯一可以修改共享数据的入口即任何对共享数据的修改操作都要通过mutation。我们可以看到在store中还有一个getters.js和actions.js其中getters用来从state中的原始数据进一步派生出新的数据因为有时往往组件需要的是经过进一步处理的派生数据而action则用来处理异步请求因为mutation只能用来处理同步请求但是有些数据比如商品列表是通过调用后端接口获得的因此是异步的只有数据获得到才可以修改state中的值所以Vuex使用action处理异步请求action并不直接处理state中的数据而是在回调函数中提交mutation这样就能保证先获得数据再修改state。而在本次示例中 并没有用到getter和action因此暂且不展示这两个的使用。最后store需要一个index.js将上述文件组织起来/* vuex最核心的管理对象 */ import Vue from vue; import Vuex from vuex; import state from ./state; import mutations from ./mutations; import actions from ./actions; import getters from ./getters; Vue.use(Vuex) export default new Vuex.Store({ state, mutations, actions, getters, })我们再来看看两个Vue组件首先是计数组件count.vuetemplate div div当前购物车中总的商品数为{{totalNum}}/div router-link to/返回购物车界面/router-link /div /template script import {mapState} from vuex export default { name: count, data() { return { } }, computed:{ ...mapState([totalNum]) }, } /script style scoped /style我们看到该组件需要用到共享数据“totalNum”因此需要先在script中引入mapState然后在computed中使用mapState并选中totalNum这样totalNum就和组件中的data一样可以直接使用了。我们再来看看购物车组件shoppingCar.vuetemplate div classhello div {{msg}} /div br br span input typetext :valuetotalNum/ button clickincreaseNum/button button clickdecreaseNum-/button /span router-link to/count查看当前总商品数/router-link /div /template script import {mapState,mapMutations} from vuex export default { name: shopping, data () { return { msg: 欢迎来到购物车界面, } }, computed:{ ...mapState([totalNum]) }, methods:{ ...mapMutations([changeNum]), increaseNum(){ this.changeNum(this.totalNum1); }, decreaseNum(){ this.changeNum(this.totalNum-1); } } } /script !-- Add scoped attribute to limit CSS to this component only -- style scoped h1, h2 { font-weight: normal; } ul { list-style-type: none; padding: 0; } li { display: inline-block; margin: 0 10px; } a { color: #42b983; } /style可以发现该组件同样需要用到“totalNum”这个共享数据与此同时该组件还需要对这个共享数据进行修改而修改共享数据则还需要引入“mapMutations”并在script的methods中使用mapMutations选中mutation中的方法“changeNum”此后这个方法就和vue组件中其他的method一样了可以在视图中直接用click进行绑定。从整体来看Vuex的工作机制如下图所示好我们来看一下运行效果首先在购物车页面修改商品数然后点击“查看当前商品总数”进入计数界面可以发现数目和购物车页面中修改的结果一致并且URL并没有传递参数代码中也没有使用cookie和数据库只需要正确使用Vuex就实现了跨页面数据传递。随着项目的扩大这一效果将会变得十分方便且容易维护

相关新闻

2026/7/28 14:30:23

企业协同办公工具简览

混合办公常态化下,协同工具种类繁多。以下基于公开信息,按类别整理部分主流产品,供参考。 一、文件管理与AI办公 1、百度网盘企业版:定位于企业文件管理与AI辅助,支持按需扩容存储、单文件2TB上传;提供四级…

2026/7/28 14:25:22

三步找回你的QQ空间青春记忆:GetQzonehistory终极指南

三步找回你的QQ空间青春记忆:GetQzonehistory终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还记得那些年你在QQ空间写下的第一条说说吗?那些记录着青春…

2026/7/28 16:46:06

知网AIGC检测技术升级:原理、应对与学术诚信

1. 项目概述:AIGC检测技术升级的背景与挑战2026年知网AIGC检测系统的这次大升级,标志着学术界对人工智能生成内容(Artificial Intelligence Generated Content)的识别进入全新阶段。作为国内最大的学术资源平台,知网此…

2026/7/28 16:46:06

归并排序算法原理与力扣应用实战

1. 归并排序算法原理与实现归并排序(Merge Sort)是一种典型的分治算法,其核心思想是将原始数组不断拆分为更小的子数组,直到每个子数组只包含一个元素,然后再将这些有序的子数组合并成更大的有序数组。这种算法的时间复…

2026/7/28 16:46:06

如何简单快速永久保存微信聊天记录:WeChatMsg完整指南

如何简单快速永久保存微信聊天记录:WeChatMsg完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…

2026/7/28 16:46:06

微服务框架选型对比——Spring Cloud、Dubbo 与 gRPC 的技术债务与收益

微服务框架选型对比——Spring Cloud、Dubbo 与 gRPC 的技术债务与收益 一、开篇导语:微服务框架选型的隐性成本远超预期 微服务框架的选型看似是一个技术偏好问题,实则是一个长达 3-5 年的技术债务决策。Spring Cloud 的生态完整性、Dubbo 的 RPC 性能优…

2026/7/28 16:41:06

基于掌控板与超声波传感器的智能避障小车项目实践

1. 项目概述:当一只瓢虫被困在“数字牢笼”里最近在Labplus3和掌控板的社区里,看到一个挺有意思的项目,叫“一只瓢虫的困惑——画地为牢”。光看标题,你可能会觉得这像是个哲学寓言或者艺术装置。但对我们这些搞硬件编程和互动设计…

2026/7/28 13:41:25

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/28 0:03:34

学术论文研究创新点梳理与核心价值提炼指南

本科毕业论文是大学四年最大的坎。开题报告憋一周写不出三页,找文献翻遍十几个网站还是缺关键资料,写正文卡壳半天憋不出一句话,降重改到凌晨三点结果逻辑全乱,答辩前一天PPT还没做完。别慌,亲测这四个工具能让你少熬半…

2026/7/28 0:03:34

开发商售楼处数字化升级怎么做?

房企的数字化转型投入正在快速增长,据行业数据显示,2025年房企数字化投入规模已突破800亿元,年复合增长率达35%。售楼处的数字化升级不是单一环节的改造,而是从“获客-展示-成交-服务”全链路的系统升级。数字化升级四步法第一步&…

2026/7/28 0:03:34

模型不再值钱之后,AI 编程工具在争什么

2026 年 7 月,AI 编程工具赛道发生了一个标志性转折:模型本身不再值钱了。当 Kimi K3 开源模型在编程基准上击败 GPT 和 Claude,当 GitHub Copilot 第一次把开源模型纳入选择器,当 OpenAI 把 Codex 并入 ChatGPT 做成三合一超级应…

2026/7/28 4:38:09

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…