actions的使用详解

article/2025/8/22 5:19:39

actions的使用详解

为何要有actions环节

我们之前学了vuex状态管理,组件可以引用state,但是不能直接修改state,比如发送操作到actions,在此执行异步操作,然后再提交mutation来修改state.如果没有异步操作可以直接提交到mutation跳过actions步骤。

在mutation这里devtools插件可以用来监控state状态改变记录。如果有异步操作不通过actions直接到mutations就会无法捕捉。

所以mutaions中的方法必须是同步方法,不能有异步操作

updateInfo(state) {setTimeout(()=>{state.info.name='v587'},1000)
}

在之前的更新信息方法内写上定时器模拟异步操作

在这里插入图片描述

这就是在mutations里写异步操作的弊端。

增加actions环节

增加不是替代,不要试图在action里直接操作state,那样就是替代了mutation的工作。我们只是为了将异步操作分离开来,放到此处单独处理。

所以getters和mutations的默认参数都是state,而actions参数确是context

具体的步骤

组件发送请求给actions

updateInfo() {//this.$store.commit('updateInfo')this.$store.dispatch('aUpdateInfo')
}

当然也可以发送参数跟在函数名后,或者直接将dispatch参数写成对象形式。

和mutations提交规则是一样的。

updateInfo(count) {//this.$store.commit('updateInfo')this.$store.dispatch({type:'aUpdateInfo',count})
}
actions执行异步操作后提交到mutations
actions: {//默认参数context:上下文aUpdateInfo(context,count){setTimeout(()=>{context.commit('updateInfo')console.log(count.count)},1000)}
},
mutations修改state
   updateInfo(state) {state.info.name='qcl'}
有一个需求

我们异步操作,修改成功后,要告诉组件已经修改成功,然后组件进行下一步操作。当我们在actions里commit的时候如果没有报错,就可以认为提交成功。

我们此时可以直接在组件里调用actions方法时传入一个函数

updateInfo(count) {//this.$store.commit('updateInfo')this.$store.dispatch({type:'aUpdateInfo',count,success:()=>console.log('完成异步操作')})
}
actions: {//默认参数context:上下文aUpdateInfo(context,count){setTimeout(()=>{context.commit('updateInfo')console.log(count.count)count.success()},1000)}
},

如果异步操作成功后回调success函数即可。

记住如果dispatch和commit方法参数都是对象,那么接受的方法的参数也是对象。

那这样不又是之前的问题,异步操作代码和业务代码放到了一起,显得结构十分杂乱。

我们不是学过promise吗

aUpdateInfo(context,count){new Promise(resolve => {setTimeout(()=>{context.commit('updateInfo')resolve(count)},1000)}).then(res=>{console.log(res.count)res.success()})
}

然后用promise将异步操作和回调分开

我写的还是不够优雅,既然回调函数是为了让组件知道,commit成功,自然要在外边执行回调函数

改进

aUpdateInfo(context, payload) {return new Promise((resolve, reject) => {setTimeout(() => {context.commit('updateInfo')console.log(payload)resolve('成功')}, 1000)})
}
updateInfo(count) {//this.$store.commit('updateInfo')this.$store.dispatch('aUpdateInfo', '我是携带信息').then(res=>console.log(res))
}

我们这次加上一个return来返回Promise,这样一旦updateInfo执行dispatch方法时,就会跳到aUpdateInfo方法,该方法又将Promise返回到updateInfo方法,此时将then接着dispatch方法后边就是将then接Promise后边。

这样实现了双向信息的传递,首先我们通过dispatch方法传入携带信息,我们在actions里既可以使用携带信息,同时如果要给外部信息,通过可以利用返回Promise方法,将给外界的信息放在resolve参数里,不用单独在组件方法里用参数接受,通过then方法接受使用。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/Tj4LgBsb.shtml

相关文章

idea插件Material Theme主题设置方法

首先:如果要设置下图这种: 1. 先下载插件 2. 设置主题 3. 设置代码界面主题 4. 下载 Atom Material Icons插件

idea工具推荐几款好用的代码theme主题颜色

先去这个主题网站选择自己喜欢的主题http://color-themes.com/?viewindex 我个人比较喜欢这几款,你们要是喜欢其他主题的可以选择别的 点击下面的下下载按钮 跳转页面后点击下载 然后在我们的idea编辑器器中导入主题jar包找到我们下载的jar包然后点击ok 然后点击E…

Material Theme 主题插件 - Sublime 插件

1. 安装 Material Theme 主题插件 Material Theme主题、配色方案所占的区域 2. Material Theme 配色方案(右侧区域) 查看可用的配色方案 可选配色方案(个人推荐:Material-Theme-Darker) Darker 配色方案效果

android_基础_常见主题theme风格详解

本文出自门心叼龙的博客,转载请注明出处: https://blog.csdn.net/geduo_83/article/details/86560896 目录 1. 什么是Style,什么是Theme? 2. 在定义Theme的时候符号和?符号有何区别? 3. 怎么通过代码给…

iview 实现在theme主题中添加某一个新模块的主题颜色切换

背景:直接下载的iview-admin 1.3.1模板 1、iview 自带主题theme 主要有4个颜色组成 分别为 默认的蓝色,其他分别为红色,蓝色,洋红色;然后在根据菜单栏是否为黑色和白色的组合状态所以有8中组合的主题; 2、…

Android——Theme和Style-由浅入深,全面讲解

1、官方详细解读 样式和主题背景 | Android 开发者 | Android Developers 2、应用场景 类似web设计中css样式。将应用设计的细节与界面的结构和行为分开。 样式style :应用于 单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性 主题theme&…

关于eclipse IDE安装Darkest Dark Theme主题插件

听说Darkest Dark Theme是现在最受欢迎的eclipse主题插件,于是我也来搞了一下。 Darkest Dark Theme官方网站(打开慢的要死,不知道是不是只有我会有这个问题。) https://marketplace.eclipse.org/content/darkest-dark-theme安装教程: 1.打开…

Vue Theme主题样式整理

为什么80%的码农都做不了架构师?>>> 一、ElementUI官方主题在线生成预览 https://elementui.github.io/theme-chalk-preview/#/zh-CN 使用步骤: 1.选择主题颜色,下载主题 包,然后解压 2.找到node_modules下的element-u…

Android Theme 常见主题风格详解

本文为自己多年来在Android实战开发过程中总结归纳的一些常见问题,现在分享出来希望对初学者有所帮助。 本文出自门心叼龙的博客,转载请注明出处: https://blog.csdn.net/geduo_83/article/details/86560896 目录 1. 什么是Style&…

Android自带的Theme主题图解

一、Manifest文件中: 从上图中我们可以看到在这个应用程序中我们的主题应用的是 AppTheme ,然后我们去看看 AppTheme 。 二、style.xml文件中: 这个文件是在应用工程中的: 然后又可以发现 AppTheme 主题样式是继承自 AppBaseTheme 主题样式的, 而 AppBaseTheme 主题样式又…

OpenWRT LUCI Theme主题定制

本人所写的博客都为开发之中遇到问题记录的随笔,主要是给自己积累些问题。免日后无印象,如有不当之处敬请指正(欢迎进扣群 24849632 探讨问题); 我们在github上先找一个合适的主题 https://github.com/search?q=luci+theme 比如我们以 rosywrt/luci-theme-rosy 为例 第…

Android的Theme主题切换

简单的Theme换肤功能 效果截图 1、定义属性 先定义几个需要改变的属性&#xff0c;例如&#xff1a; <!--换肤--><attr name"userNameColor" format"color" /><attr name"commonColor" format"color" /><…

Eclipse设置Theme主题颜色

设置Eclipse的代码编辑区背景为暗黑色系&#xff1a; 如需转载&#xff0c;请注明转载自&#xff1a;blog.csdn.net/it1988888 相关文件下载&#xff1a;http://guari.github.io/eclipse-ui-theme/ 方案一--下载颜色主题配置文件&#xff0c;离线导入配色方案的设置&#xf…

Jupyter lab Theme 主题更换

Jupyter lab Theme 主题更换 1. 打开Jupyter-lab2. 再拓展插件中搜索 “theme”3. 安装自己喜欢的主题4. 在Setting->JupyterLab Theme->选择"自己刚安装的主题"jupyterlab_miami_nights 主题jupyterlab_onedarkpro 主题 1. 打开Jupyter-lab 2. 再拓展插件中搜…

PySimpleGui theme主题使用

第一章 PySimpleGui theme主题使用 目录 系列文章目录 前言 一、theme是什么&#xff1f; 二、使用步骤 1.打印所有主题&#xff1a; 2.主题设置 3.更新主题的设置 总结 前言 通过设置主题&#xff0c;可快速设置GUI的颜色&#xff0c;节省自己设置UI的时间 一、theme是什么&a…

Hexo修改theme主题

学习目标 本文主要学习的内容如下&#xff1a; 如何去获取到 NexT 主题 如何去安装和配置 NexT 主题 设置菜单&#xff0c;如分类&#xff0c;标签&#xff0c;关于我等简单配置 获取开源的 Hexo 主题 在上节介绍如何快速去搭建 Hexo &#xff0c;最终展示的效果如下图所…

【Android开发基础】应用界面主题Theme使用方法

主题Theme就是用来设置界面UI风格&#xff0c;可以设置整个应用或者某个活动Activity的界面风格。在Android SDK中内置了下面的Theme&#xff0c;可以按标题栏Title Bar和状态栏Status Bar是否可见来分类&#xff1a; •android:theme"android:style/Theme.Dialog" …

Flutter 基础之 Theme 主题(样式篇)

声明&#xff1a;本篇文章已授权微信公众号 YYGeeker 独家发布。 博主原创文章&#xff0c;转载请注明出处&#xff1a;小嵩的博客 一、介绍 Theme 类将主题应用于子控件&#xff0c;Theme&#xff08;主题&#xff09;它描述了应用程序的颜色和排版选择。Theme有两种&#x…

Android中Theme主题和Style样式使用介绍总结

1.Theme主题 1.1.Theme主题作用范围 Theme主要是针对应用级别的或者说窗体级别&#xff0c;可以设置应用主题&#xff08;应用换肤效果&#xff09;和Activity的主题&#xff1b;主题是不能应用在某一个单独的View中&#xff1b;或者说Theme是用来设置应用全局主题风格的&…

【转】提升工作效率的一些小技巧——资源管理器篇

当我看到有人打开资源管理器&#xff0c;一个一个文件夹点进去&#xff0c;再点出来&#xff0c;我就着急。特别是有人在会议上打开我的电脑&#xff0c;然后寻找文件&#xff0c;我就特别捉急&#xff0c;这不只是在浪费自己的时间&#xff0c;还浪费参加会议人的时间。 我把资…