前端Vue篇之Vuex和单纯的全局对象有什么区别?如何在组件中重复使用Vuex的mutation、为什么 Vuex 的 mutation 中不能做异步操作?

本文主要是介绍前端Vue篇之Vuex和单纯的全局对象有什么区别?如何在组件中重复使用Vuex的mutation、为什么 Vuex 的 mutation 中不能做异步操作?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • Vuex和单纯的全局对象有什么区别?
  • 如何在组件中重复使用Vuex的mutation
  • 为什么 Vuex 的 mutation 中不能做异步操作?


Vuex和单纯的全局对象有什么区别?

Vuex是专门为Vue.js应用程序开发的状态管理模式。与单纯的全局对象相比,Vuex有以下区别:

  1. 状态存储的响应式特性: 当Vue组件从Vuex的store中读取状态时,如果store中的状态发生变化,相应的组件也会相应地高效更新。这意味着状态的变化会自动反映到相关的组件中。

  2. 状态的改变方式: 在Vuex中,不能直接改变store中的状态。改变状态的唯一方式是显式地提交(commit)mutation。这样做有助于更好地追踪状态的变化,以便更好地了解应用程序的运行情况。

  3. 组件通信: Vuex提供了一种统一的方式来进行组件通信,使得组件之间的通信更加方便和可靠。相对而言,在纯粹的全局对象中,需要手动实现组件通信,这样会增加代码的复杂度。

  4. 插件机制: Vuex提供了插件机制,可以方便地扩展Vuex的功能。而纯粹的全局对象缺乏这样的扩展机制。

综上所述,Vuex提供了更加完善和可靠的状态管理方案,使得组件之间的通信更加方便和可靠,同时也提供了插件机制,便于扩展Vuex的功能。

如何在组件中重复使用Vuex的mutation

在组件中重复使用 Vuex 的 mutation 可以通过 mapMutations 辅助函数来实现。这个辅助函数可以将 Vuex 中的 mutation 映射到组件的方法中,这样在组件中就能直接使用这些方法来触发对应的 mutation。

首先,在组件中引入 mapMutations 辅助函数:

import { mapMutations } from 'vuex'

然后,在组件的方法部分使用 ...mapMutations

methods: {...mapMutations({setNumber: 'SET_NUMBER'})
}

这样做之后,你就可以在组件中直接使用 this.setNumber(10) 来触发名为 SET_NUMBER 的 mutation,并且将参数 10 传递给这个 mutation。实际上,这相当于调用 this.$store.commit('SET_NUMBER', 10)

在组件中重复使用 Vuex 的 mutation 非常简单。你可以通过在组件的方法中调用 this.$store.commit('mutationName') 来触发 Vuex 中的 mutation。这样可以在不同的组件中重复使用同一个 mutation。

举个例子,假设你有一个名为 increment 的 mutation,可以在一个组件中这样使用:

methods: {increaseCount() {this.$store.commit('increment');}
}

而在另一个组件中,也可以通过相同的方式来使用:

methods: {updateTotal() {this.$store.commit('increment');}
}

使用 mapMutations 辅助函数能够让你在组件中更加方便地重复使用 Vuex 的 mutation,而不需要重复编写相同的逻辑。

为什么 Vuex 的 mutation 中不能做异步操作?

Vuex 的 mutation 中不能做异步操作,主要是因为 Vuex 遵循一种称为"单向数据流"的模式。在这种模式下,所有状态的改变都必须通过提交 mutation 来进行,以便状态变化是可预测且可追踪的。

当一个 mutation 被触发时,Vuex 会立即改变状态,并能够记录状态的变化,这样就可以在开发工具中进行时间旅行式的调试。如果允许在 mutation 中进行异步操作,就会导致状态变化的时序变得不可预测。因为异步操作的不确定性,会导致无法准确追踪状态的变化,也无法进行精确的状态记录和调试。

为了解决这个问题,Vuex 提供了另一个概念,即 actions。Actions 允许在其中执行异步操作,并最终触发对应的 mutation 来改变状态。这种方式保证了状态变化的可预测性和可追踪性,同时也能够处理异步操作。

因此,为了保持状态管理的严谨性和可维护性,Vuex 限制了 mutation 中的操作必须是同步的,而异步操作应当放在 actions 中进行。这样可以方便地跟踪每一个状态的变化,从而能够实现一些工具帮助更好地了解我们的应用。

持续学习总结记录中,回顾一下上面的内容:
Vuex 和单纯的全局对象区别在于 Vuex 提供了更完善和可靠的状态管理方案。它包含了状态管理、响应式特性、组件通信和插件机制等功能,而单纯的全局对象则缺乏这些。
在组件中重复使用 Vuex 的 mutation 可以通过 mapMutations 辅助函数来实现。这个函数可以将 Vuex 中的 mutation 映射到组件的方法中,方便在不同组件中重复使用。
Vuex 的 mutation 中不能做异步操作是因为 Vuex 遵循"单向数据流"模式,要求状态变化可预测且可追踪。异步操作会导致状态变化的时序不可预测,难以追踪和调试。为了解决这个问题,Vuex 提供了 actions,允许在其中执行异步操作,并最终触发对应的 mutation 来改变状态。
这些特性使得 Vuex 成为一个强大的状态管理工具,可以有效地管理应用的状态,并且易于跟踪状态的变化,以及在不同组件间共享和重复使用状态变更的逻辑。

这篇关于前端Vue篇之Vuex和单纯的全局对象有什么区别?如何在组件中重复使用Vuex的mutation、为什么 Vuex 的 mutation 中不能做异步操作?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773744

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo