【Vue】Vue全家桶(七)Vuex

vue 全家桶(七)vuex 状态管理(实现购物车) Vuex 解决了多个视图依赖于同一状态和来自不同视图的行为需要变更同一状态的问题,将开发者的精力集中于数据的更新而不是数据在组件之间的传递上。 本文以购物车为例,对概念没有过多阐述,建议先浏览官网:https://vuex.vuejs.org/ 一. 预期效果    - 【页面】商品列表组件、购物车列表组件、商品结算组件    - 【功能】将商品加入购物车,更新购物车列表    - ... 阅读详情

1. Vuex 概述

1.1 Vuex 是什么

Vuex 是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间数据的共享。

在这里插入图片描述

1.2 使用 Vuex 统一管理状态的好处

①能够在 vuex 中集中管理共享的数据,易于开发和后期维护

②能够高效地实现组件之间的数据共享,提高开发效率

③存储在 vuex 中的数据都是响应式的,能够实时保持数据与页面的同步

1.3 什么样的数据适合存储到Vuex中

一般情况下,只有组件之间共享的数据,才有必要存储到 vuex 中;对于组件中的私有数据,依旧存储在组件自身的 data 中即可。

2. Vuex 的基本使用

1.安装 vuex 依赖包

npm install vuex --save

2.导入 vuex 包

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

3.创建 store 对象

const store = new Vuex.Store({
	// state 中存放的就是全局共享的数据
	state: { count: 0 }
})

4.将 store 对象挂载到 vue 实例中

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

案例:计算器

打开刚刚创建的vuex项目,找到src目录中的App.vue组件,将代码重新编写如下:

<template>
  <div>
    <my-addition></my-addition>

    <p>----------------------------------------</p>

    <my-subtraction></my-subtraction>
  </div>
</template>

<script>
import Addition from './components/Addition.vue'
import Subtraction from './components/Subtraction.vue'

export default {
  data() {
    return {}
  },
  components: {
    'my-subtraction': Subtraction,
    'my-addition': Addition
  }
}
</script>

<style>
</style>

在components文件夹中创建Addition.vue组件,代码如下:

<template>
    <div>
        <h3>当前最新的count值为:</h3>
        <button>+1</button>
    </div>
</template>

<script>
export default {
  data() {
    return {}
  }
}
</script>

<style>
</style>

在components文件夹中创建Subtraction.vue组件,代码如下:

<template>
    <div>
        <h3>当前最新的count值为:</h3>
        <button>-1</button>
    </div>
</template>

<script>
export default {
  data() {
    return {}
  }
}
</script>

<style>
</style>

最后在项目根目录(与src平级)中创建 .prettierrc 文件,编写代码如下:

{
    "semi":false,
    "singleQuote":true
}

在这里插入图片描述

3. Vuex 的核心概念

3.1 核心概念概述

Vuex 中的主要核心概念如下:

  • State
  • Mutation
  • Action
  • Getter

3.2 State

State 提供唯一的公共数据源,所有共享的数据都要统一放到 Store 的 State 中进行存储。

// 创建store数据源,提供唯一公共数据
const store = new Vuex.Store({
	state: { count: 0 }
})

组件访问 State 中数据的第一种方式:

this.$store.state.全局数据名称

组件访问 State 中数据的第二种方式:

// 1. 从 vuex 中按需导入 mapState 函数
import { mapState } from 'vuex'

通过刚才导入的 mapState 函数,将当前组件需要的全局数据,映射为当前组件的 computed 计算属性:

// 2. 将全局数据,映射为当前组件的计算属性 
computed: { 
	...mapState(['count']) 
}

3.3 Mutation

Mutation 用于变更 Store中 的数据。

①只能通过 mutation 变更 Store 数据,不可以直接操作 Store 中的数据。

②通过这种方式虽然操作起来稍微繁琐一些,但是可以集中监控所有数据的变化。

// 定义 Mutation 
const store = new Vuex.Store({ 
	state: { 
		count: 0 
	}, 
	mutations: { 
		add(state) { 
			// 变更状态 
			state.count++ 
		} 
	} 
})
// 触发mutation 
methods: { 
    	handle1() { 
            // 触发 mutations 的第一种方式 
            this.$store.commit('add') 
        } 
}

可以再出发mutations时传递参数:

// 定义Mutation
const store = new Vuex.Store({
	state: {
		count: 0
	},
	mutations: {
		addN(state, step) {
		// 变更状态
		state.count += step
		}
	}
})
// 触发mutation 
methods: { 
	handle2() { 
		// 在调用 commit 函数, 
		// 触发 mutations 时携带参数 
		this.$store.commit('addN', 3) 
	} 
}

this.$store.commit() 是触发 mutations 的第一种方式,触发 mutations 的第二种方式:

// 1. 从 vuex 中按需导入 mapMutations 函数
import { mapMutations } from 'vuex'

通过刚才导入的 mapMutations 函数,将需要的 mutations 函数,映射为当前组件的 methods 方法:

// 2. 将指定的 mutations 函数,映射为当前组件的 methods 函数
methods: {
	...mapMutations(['add', 'addN'])
}

3.4 Action

Action 用于处理异步任务。

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

// 定义 Action
const store = new Vuex.Store({ 
	// ...省略其他代码 
	mutations: { 
		add(state) { 
			state.count++ 
		} 
	}, 
	actions: { 
		addAsync(context) { 
			setTimeout(() => { 
				context.commit('add') 
			}, 1000) 
		} 
	} 
})
// 触发 Action
methods: {
	handle() {
		// 触发 actions 的第一种方式
		this.$store.dispatch('addAsync')
	}
}

触发 actions 异步任务时携带参数:

// 定义 Action 
const store = new Vuex.Store({ 
	// ...省略其他代码 
	mutations: { 
		addN(state, step) { 
			state.count += step 
		} 
	}, 
	actions: { 
		addNAsync(context, step) { 
			setTimeout(() => { 
				context.commit('addN', step) 
			}, 1000)
        }
   }
})
// 触发 Action 
methods: {
	handle() { 
		// 在调用 dispatch 函数, 
		// 触发 actions 时携带参数 
		this.$store.dispatch('addNAsync', 5) 
	} 
}

this.$store.dispatch() 是触发 actions 的第一种方式,触发 actions 的第二种方式:

// 1. 从 vuex 中按需导入 mapActions 函数 
import { mapActions } from 'vuex'

通过刚才导入的 mapActions 函数,将需要的 actions 函数,映射为当前组件的 methods 方法:

// 2. 将指定的 actions 函数,映射为当前组件的 methods 函数 
methods: { 
	...mapActions(['addASync', 'addNASync']) 
}

3.5 Getter

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

①Getter 可以对 Store 中已有的数据加工处理之后形成新的数据,类似 Vue 的计算属性。

②Store 中数据发生变化,Getter 的数据也会跟着变化。

// 定义 Getter
const store = new Vuex.Store({
	state: {
		count: 0
	},
	getters: {
		showNum: state => {
			return '当前最新的数量是【'+ state.count +'】'
		}
	}
})

使用 getters 的 第一种方式 :

this.$store.getters.名称

使用 getters 的第二种方式:

import { mapGetters } from 'vuex'

computed: {
	...mapGetters(['showNum'])
}
vue全家桶是指什么?有哪些东西? Vue全家桶一般来说指的是脚手架vue-cli、路由vue-Router、状态管理模式vuex、Axios、elementUI等ui框架和打包工具webpack,下面我们分别介绍。 阅读详情

相关推荐

Vue全家桶 - Vuex的理解和学习

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

鲍胜印的博客 3027

Vuex 简入

前言 Vuex 是一个专为vue.js应用程序开发的状态管理模式+库,它采集集中式存储管理应用的所有组件的状态,并已相应的规则保证状态以一种可预测的方式发生改变。 核心概念 1.1 State 1.2 Getter 有时候我们需要从store中的state种派生出一些状态,例如对列表进行过滤并计数。 1.3 Mutation 更改Vuex的store种的状态的唯一方法是提交mutation,vuex中的mutation非常类似于事件,必须同步操作 1.4 Action A...

sally18的博客 626

华为防火墙USG6000系列多ISP上网(通过WEB界面设置)

华为防火墙多ISP上网,内网分区上网。内网多网段不同上网方式。

daxihe880的博客 1万+

vuex优缺点小结

vuex是vue中的状态管理模式。它采用集中式存储管理应用的所有组件的状态。项目中也会经常用到,今天总结一下其优缺点。 1、优点 能够在vuex中,集中管理共享的数据,易于开发和后期维护; Vuex 的状态存储是响应式的,当 Vue 组件从 store中读取状态的时候,若 store 中的状态发生变化,能够触发响应式的渲染页面更新 (localStorage就不会),那么相应的组件也会相应地得到高效更新。 js 原生的数据对象写法, 比起 localStorage 不需要做转换, 使用方便 限定了一种可

qq_40922656的博客 6932

基于PINN的一个简单的求解偏微分方程实例

本人是做化工模拟的一名学生,最近在学习PINN(Physics-Informed Neural Networks,物理信息神经网络)对管道动力学进行建模研究,PINN由于其对机理与数据的良好兼顾性非常热门,本文是作者对PINN入门研究过程的一个练手小题目,main code也是作者代码是基于pytorch2.6.0写的,发上来供各位参考,欢迎研究管道动力学和PINN的小伙伴一起讨论~

weixin_64491760的博客 1741

航测无人机las点云数据生成DEM

“ 做航测的同僚都知道,Pix4D或者CC(ContextCapture)都可以生成DSM,往往高程点提取以及土方计算都需要用到DEM,PhotoScan软件可以提出地面点并只应用地面点连接三角网,然而分类效果差,生成的DEM不管是平整度还是精度,都不理想。而传统等高线生DEM需要耗费较长时间,以下提供一种参考方法,供大家探讨。 ” 1 点云数据 航测类软件大多可以生成点云数据,如Pix4D,PhotoScan,CC等,此次点云数据为citymapper2相片基于CC生产的Las点云。 2 筛选地面点 筛.

qq_43173805的博客 1万+

使用 vuex 的优势是什么?它主要解决什么问题?

Vuex提供了一个集中式的状态管理方案,可以帮助我们更好地组织、管理和共享应用的状态。可预测的状态管理:Vuex使用了单向数据流的概念,使得状态的变化变得可预测和可追踪。所有对状态的修改都必须通过提交mutation来进行,这样我们可以清楚地知道状态是如何变化的,并且可以方便地进行调试和追踪。总结来说,Vuex的主要优势是它提供了一个集中式的状态管理方案,能够更好地组织、管理和共享应用的状态。它解决了Vue应用中的状态管理问题,并提供了可预测的状态变化、插件化的扩展性和更好的开发体验。

m0_61093181的博客 900

Echarts - 去掉图表上的横线和竖线

效果图 默认效果: 变为如下图所示效果: 实现方法 官方配置文档:https://echarts.apache.org/zh/option.html#radar.splitLine 在 xAxis yAxis 配置中分别加入以下代码: splitLine: { show:false }

🏆 前端领域优质创作者 1万+

什么是 Vuex?使用 Vuex 有哪些好处?

在这个模式下,用户通过操作视图,触发 actions,actions 通过提交 mutations 来修改 state,然后 state 的变化反映到视图中。这种单向数据流的设计使得状态的变化更加可追踪,易于调试。如果应用规模较小,全局状态管理需求不高,可能使用一个简单的状态管理就足够了。而使用 Vuex,可以通过集中化管理状态,提供了清晰、可预测的状态管理方式,有效解决了这些问题。简单来说,Vuex 维护了一个对象,该对象存储了 Vue 应用中多个组件所需要共同使用的变量,使得组件可以共享它们。

weixin_63490373的博客 435

无人驾驶Autoware导读

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对无人驾驶Autoware介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 2398

Oracle EBS Interface/API(49)- AP付款取消API

Oracle EBS AP付款取消API介绍和简单实例

陈显平的专栏-Oracle EBS 850

vuex的优缺点

什么是 vuex ? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 它采用集中式存储管理应用的所有组件的状态, 并以相应的规则保证状态以一种可预测的方式发生变化。 (要按照规定的方式改变数据) 面对一个储存状态数据的工具时, 有几个方面的问题我们马上可以想到的 数据放在哪里 store state 如何存入/更新数据 commit mutation 如何获取数据 this.$store.state.模块.数据字段 vuex的优点: js 原生的数据对象写法, 比起 localS

l13640698113的博客 1万+

物理AI重构自动驾驶供应链 | 传统Tier1盈利模式崩塌,纯算法/软硬一体双路线落地对比,助力智驾软件商业化与全场景模型迭代

2026年是自动驾驶物理AI规模化落地元年,行业彻底告别传统感知-预测-规划-控制的模块化分层开发范式,迈入以世界模型、物理规则推演、端到端动作生成为核心的全新技术阶段。不同于传统AI仅完成图像识别、目标检测的浅层感知任务,物理AI能够深度理解道路交通中的动力学约束、路面摩擦、车辆博弈、行人运动规律等真实物理逻辑,实现对复杂路况的时序推演与自主决策,从底层重构自动驾驶技术架构。技术迭代同步引发产业链颠覆性变革,沿用数十年的传统自动驾驶Tier1商业模式全面崩塌。

getusushu的博客 289

什么是Vue全家桶,Vue全家桶包含哪些东西以及怎么使用

vue全家桶介绍: vue全家桶是基于vue开发必备的也是必学的东西,概括起来就是:、1.项目构建工具、2.路由、3.状态管理、4.http请求工具。 最常见常用的vue全家桶简单的介绍一下,希望可以帮助你了解认识学会vue全家桶! 1.vue-cli vue-cli就是快速创建搭建一个vue项目的脚手架工具,安装vue-cli,直接在cmd命令执行:npm install -g vue-cli(安装的cnmp直接把npm改一下就可以),之后需要填写一些项目信息,不会的可以去网上搜一下。 2.vue-rou

海贼王某人的博客 4万+

RK3588开发笔记-Hailo AI模块调试

本文详细介绍了在RK3588开发板上调试HailoAI模块的全过程。首先概述了RK3588处理器的强大性能(4核A76+4核A55,6TOPS算力)和Hailo-8 AI加速模块的特点,重点阐述了通过PCIe接口连接两者的硬件方案。调试步骤包括:确认内核PCIe配置、编译Hailo驱动、下载固件文件并部署到指定目录,最后通过运行resnet模型验证模块性能(实测FPS达2456)。文中提供了完整的软件包下载地址和GitHub源码链接,为开发者实现类似AI加速方案提供了实用参考。

flypig has a dream! 965

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

vue全家桶都包括哪些 vue全家桶都有什么 vue全家桶详细介绍

vue全家桶都有什么 全家桶,顾名思义,对于开发一个完整的中大型单页面应用项目所必须的所必须的插件和框架。 注:此文章主要讲解vue-cli脚手架开发方式,不介绍各插件的具体使用方式,具体使用方式详见其他详细介绍文章。 一、vue-cli vue-cli也叫脚手架,官方定义为Vue.js 开发的标准工具!相比scirpt标签引入,脚手架具有如下特点: 1)、功能丰富 对 Babel、TypeScr...

Taurus_666 2万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【vue2】vue全家桶介绍,学习vue必备

vue全家桶介绍包括vue介绍、vue-cli、vue-router、vuex、axios、UI框架

嗨,朋友你好!我是前端领域的工作者 6198

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

vue 全家桶 vue教学 vue

vue 全家桶 vue教学 vue

weixin_71899005的博客 3657

Vue 全家桶介绍

Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vuejs.org),vuex(http://vuex.vuejs.org), vue-resource(https://github.com/pagekit/vue-resource)。再加上构建工具vue-cli,sass样式,就是一个完整的vue项目的核心构成。 概括起来就是...

莫莫博客 10万+

Vue全家桶之VueX(六)

✍ 1、Vuex 1.1、什么是Vuex 官方解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。 状态管理到底是什么? 状态管理模式、集中式存储管理这些名词听起来就非常高大上,让人捉摸不透。 其实,你可以简单的将其看成把需要多

Augenstern_QXL的博客 1648

Vue全家桶都包括些什么?

Vue有著名的全家桶系列,包含了vue-router(http://router.vuejs.org),vuex(http://vuex.vuejs.org), vue-resource(https://github.com/pagekit/vue-resource)。再加上构建工具vue-cli,就是一个完整的vue项目的核心构成。 vue-router路由 推荐使用npm工具来安装vue-ro...

weixin_44389466的博客 1万+

【Vue全家桶】Vuex状态管理

在开发中,我们会的应用程序需要处理各种各样的数据,这些 数据需要保存在我们应用程序中的某一个位置,对于这些数据 的管理我们就称之为是状态管理Vuex 的状态管理的基本实现(这里采用官方的图解)...

贤蛋大眼萌 3814

vue全家桶系列 什么是vue全家桶?--概念及功能总结

用了半周时间勉强操作Git,准备保研之余还要完成开发任务,甚至没有时间看paper,太难了o(╥﹏╥)o,不过学还是要学的, 用别人一句话:武林至尊,宝刀React,号令天下,莫敢不从,Vue不出,谁与争锋,React/Vue全家桶系列已经变成了各大巨头的前端开发必备技术栈,开始系统的学习之前不妨了解一下整体的框架以及各部分的作用。 Vue全家桶一共有四个部分,各个部分都具有不同的作用,他们分别是...

csyifanZhang的博客 3201

vue全家桶

vue全家桶1.vue-cli脚手架1.1安装node环境2.2安装脚手架2.vue-Router的使用什么是vue-Router?vue-router的使用jquery传参和params传参的区别路由懒加载嵌套路由路由守卫3.Vuex的使用什么是vuex?初始化项目 1.vue-cli脚手架 1.1安装node环境 1.下载node.js : https://nodejs.org/zh-cn/ 安装步骤,一直点击next即可安装成功 2.安装成功后,打开cmd 输入 node -v即可查看安装成功后的no

m0_60899441的博客 4688

vue全家桶都有哪些

Vue全家桶

lou15516575959的博客 9012

Vue全家桶之webpack详解(四)

✍ webpack 1、认识webpack 在ES6之前,我们相要进行模块化开发,就必须借助于其他的工具,让我们可以进行模块化开发 并且在通过模块化开发完成了项目后,还需要处理模块间的各种依赖,并且将其进行整合打包 而webpack其中一个核心就是让我们可能进行模块化开发,并且会帮助我们处理模块间的依赖关系。 而且不仅仅是 JavaScript 文件,我们的CSS、图片、json文件等等在webpack中都可以被当做模块来使用 这就是webpack模块化的概念 1.1、打包 理解了webpack可以帮

Augenstern_QXL的博客 2213
上一篇: 【Vue】Vue全家桶(四)模块化+Webpack+Element-UI
下一篇: 【Vue】Vue全家桶(八)vue-cli脚手架 +图形可视化创建Vue项目+命令行创建Vue项目
前端More
博客等级 码龄7年 301粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值