iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >vuex中actions和mutation有什么区别
  • 201
分享到

vuex中actions和mutation有什么区别

2024-04-02 19:04:59 201人浏览 八月长安
摘要

这篇文章给大家分享的是有关Vuex中actions和mutation有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。vuex说明:Vuex 是一个专为 vue.js 应用

这篇文章给大家分享的是有关Vuex中actions和mutation有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

vuex说明:

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

包含的内容:

  • state:驱动应用的数据源;

  • view:以生命方式将state映射到视图;

  • actions:响应在view上的用户输入导致的状态变化;

流程示意图

vuex中actions和mutation有什么区别

但是,当我们的应用遇到多个组件共享状态时,单向数据流的简洁性很容易被破坏:

多个视图依赖于同一状态。

来自不同视图的行为需要变更同一状态。

对于问题一,传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力。

对于问题二,我们经常会采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝。以上的这些模式非常脆弱,通常会导致无法维护的代码。

因此,我们为什么不把组件的共享状态抽取出来,以一个全局单例模式管理呢?在这种模式下,我们的组件树构成了一个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为!

另外,通过定义和隔离状态管理中的各种概念并强制遵守一定的规则,我们的代码将会变得更结构化且易维护。

vuex中actions和mutation有什么区别

适用于型单页应用

安装vuex

npm i vuex

新建文件夹store,建议目录

vuex中actions和mutation有什么区别

Actions 和 mutation

mutation:(必须是同步函数)

更改store中state值的唯一方法就是提交mutation,每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数:

 mutations: {
  addNum(state) { 
   state.num ++
  }
}

你可以向 store.commit 传入额外的参数,即 mutation 的 载荷(payload):在大多数情况下,载荷应该是一个对象,这样可以包含多个字段并且记录的 mutation 会更易读:

 mutations: {
  addNum(state,Payload) { 
   state.num +=Payload.amount
  }
}

不能直接调用一个 mutation handler。这个选项更像是事件注册:“当触发一个类型为 increment 的 mutation 时,调用此函数。”要唤醒一个 mutation handler,你需要以相应的 type 调用 store.commit 方法:

//页面中的操作(一、不带参数)
 methods:{
  add(){
   this.$store.commit('addNum')
  }
 }
//二、带参数的情况下
data(){
argument:{
 amount:10
},
methods:{
  add(){
   this.$store.commit('addNum',this.arguments)
  }
 }

actions

Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态。

  • Action 可以包含任意异步操作。

 mutations: {
  addNum(state,amount) {
   state.num +=amount
  },
  someMutation(state) {
   setTimeout(()=>{
     state.count--
   },1000)
  }
 },
 actions: {
  increment (context,args) {
      context.commit('addNum',args)
  }
 },
//另一种写法
 actions: {
  increment ({commit},args) {
      commit('addNum',args)
  }
 }

Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters

分发Action

//页面中
methods:{
  add(){
   this.$store.dispatch('increment',this.pa.amount)
  }
 },

区别:

action和mutation都可以改变state中数据的状态,但是action可以处理异步函数可以在devtool中追踪数据变化,而mutation只可以处理同步函数,当处理异步函数的时候检测不到数据变化;

mutation 处理同步异步

 mutations: {
//同步
  addNum(state,amount) {
   state.num +=amount
  },
//异步
  someMutation(state) {
   setTimeout(()=>{
     state.count--
   },1000)
  }
 }

页面中操作

<template>
<div>
   <p @click="add">同步{{num}}</p>
  <p @click="reduce">异步{{count}}</p>
</div>
</template>
 methods:{
  //同步
  add(){
   this.$store.commit('increment',this.pa.amount)
  },
//异步
  reduce(){
   this.$store.commit('someMutation')
  }
 }

数据变化之前,浏览器中显示,devtool中的数据状态

vuex中actions和mutation有什么区别

vuex中actions和mutation有什么区别

当页面中的数据改变之后,追踪数据

vuex中actions和mutation有什么区别

vuex中actions和mutation有什么区别

action 处理同步异步

 mutations: {
  addNum(state, amount) {
   state.num += amount
  },
  someMutation(state) {
    state.count-- 
  }
 },
 actions: {
  increment({commit}, args) {
   commit('addNum', args)
  },
  actionSomemution(context) {
   setTimeout(() => {
     context.commit('someMutation') 
   }, 1000)
  }
 }

页面中

methods:{
  add(){
   this.$store.dispatch('increment',this.pa.amount)
  },
  reduce(){
   this.$store.dispatch('actionSomemution')
  }
 },

数据变化之前,浏览器中显示,与devtool中数据显示

vuex中actions和mutation有什么区别

vuex中actions和mutation有什么区别

操作之后数据变化,

vuex中actions和mutation有什么区别

vuex中actions和mutation有什么区别

感谢各位的阅读!关于“vuex中actions和mutation有什么区别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: vuex中actions和mutation有什么区别

本文链接: https://www.lsjlt.com/news/76561.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vuex中actions和mutation有什么区别
    这篇文章给大家分享的是有关vuex中actions和mutation有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。vuex说明:Vuex 是一个专为 Vue.js 应用...
    99+
    2024-04-02
  • Vuex中mutations和actions的区别及说明
    目录mutationMutation 必须是同步函数Action在实际开发的store文件中总结mutation 我们知道,在使用vuex对项目状态进行管理时,只能使用commit来...
    99+
    2022-12-09
    Vuex中mutations Vuex中actions mutations和actions区别
  • Vuex中this.$store.commit()和this.$store.dispatch()区别是什么
    这篇文章主要讲解了“Vuex中this.$store.commit()和this.$store.dispatch()区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vuex中this...
    99+
    2023-06-29
  • vue-resource和vuex有哪些区别
    本篇内容介绍了“vue-resource和vuex有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • java中 ${} 和 #{} 有什么区别
    目录前言1.功能不同1.1 ${} 的问题2.使用场景不同3.安全性不同3.1 使用 ${} 实现用户登录3.2 使用 #{} 实现用户登录总结前言 ${} 和 #{} 都...
    99+
    2024-04-02
  • /” 和 “\” 有什么区别
    键盘上的“/” 和 “\”这个两个“斜杠”有什么区别。 通常,“/”被叫作“正斜杠”,英语是forward slash,经常简称为slash。Windows命令用\,中文排版用/。而“\” 被叫作“反斜杠”,英语是backward sla...
    99+
    2023-09-25
    前端 java 服务器 Powered by 金山文档
  • python中“==”和“is”有什么区别
    本篇内容主要讲解“python中“==”和“is”有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中“==”和“is”有什么区别”吧!“==” 和 “is”之间有什么区别?“...
    99+
    2023-06-27
  • MyBatis中的#{}和${}有什么区别
    这篇文章主要介绍了MyBatis中的#{}和${}有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言在MyBatis 的映射配置文件中,动态传递参数有两种方式:#{...
    99+
    2023-06-21
  • Java中==和equals有什么区别
    本文小编为大家详细介绍“Java中==和equals有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中==和equals有什么区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。== 是 Java...
    99+
    2023-06-27
  • Vuex中this.$store.commit()和this.$store.dispatch()区别说明
    目录this.$store.commit()和this.$store.dispatch()的区别commit: 同步操作dispatch: 异步操作其他了解Vuex应用实例this....
    99+
    2024-04-02
  • vuex中...mapstate和...mapgetters的区别及说明
    目录...mapstate和...mapgetters的区别…mapstate…mapGettersvuex mapState mapGetters用法及...
    99+
    2024-04-02
  • CSS3中animation和transition有什么区别
    这篇文章给大家分享的是有关CSS3中animation和transition有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。CSS3动画和JS动画的区别JS 实现的是帧动画CSS3 实现的是补间动画帧动画...
    99+
    2023-06-08
  • php中mysql和mysqli有什么区别
    这篇文章主要介绍了php中mysql和mysqli有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。区别:mysqli是永远连接函数,而mysql是非持继连接函数。my...
    99+
    2023-06-15
  • Python中json.load()和json.loads()有什么区别
    小编给大家分享一下Python中json.load()和json.loads()有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、图解json.load...
    99+
    2023-06-15
  • JavaScript中match和exec有什么区别
    JavaScript中match和exec有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整...
    99+
    2023-06-14
  • JavaScript中splice和slice有什么区别
    JavaScript中splice和slice有什么区别?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、W...
    99+
    2023-06-14
  • JavaScript中join() 和split()有什么区别
    这篇文章给大家介绍JavaScript中join() 和split()有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。javascript是一种什么语言javascript是一种动态类型、弱类型的语言,基于对象...
    99+
    2023-06-14
  • jquery中css()和attr()有什么区别
    这篇文章给大家介绍jquery中css()和attr()有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。jquery中有attr()和css()两种方法:attr是attribute的缩写,意思是标签属性。cs...
    99+
    2023-06-15
  • vue中computed 和 watch有什么区别
    vue中computed 和 watch有什么区别,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、computed 和 wa...
    99+
    2024-04-02
  • Kubernetes中StatefulSet和Deployment有什么区别
    StatefulSet和Deployment是Kubernetes中用来管理应用程序的两种资源对象。它们之间的主要区别在于它们对于应...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作