vue处理异步状态的逻辑useAsyncState

devtools/2024/9/23 10:16:57/

useAsyncState并不是Vue.js的原生API,而是一些第三方库提供的自定义hook,用于简化在Vue组件中处理异步操作的过程,如发送网络请求、加载数据或执行其他耗时的任务。

实现

javascript">import { toRefs, reactive, onMounted } from "vue";/*** useAsync* @param  {Promise} pro 异步操作* @param  {Object} options 参数* @param  {Boolean} [options.manual=false] 是否手动调用* @param  {Any} options.initialData 初始化数据* @param  {Function} options.onSuccess 成功回调* @param  {Function} options.onError 失败回调*/export function useAsync(pro, options = {}) {const {manual = false,initialData,onSuccess = () => {}, onError = console.log,} = options;const state = reactive({data: initialData || null,error: null,loading: false,});const run = async () => {state.error = null;state.loading = true;try {const result = await pro();state.data = result;onSuccess();} catch (err) {onError(err);state.error = err;} finally {state.loading = false;}};onMounted(() => {!manual && run();});// 从外部主动改变数据function mutate(data) {state.data = data;}return {...toRefs(state),run,mutate,};
}

使用

javascript"><template><div v-if="listLoading">Loading...</div><div v-else-if="state">Data: {{ state }}</div><button @click="getList">run</button></div>
</template>
<script setup>
const {data: listData,loading: listLoading,run: getList,
} = useAsync(() => API.getList({flag: 1,pageNo: 0,pageSize: 20,
}), { initialData: {}, manual: true });
</script>

http://www.ppmy.cn/devtools/12616.html

相关文章

生成式AI原理技术详解(一)——神经网络与深度学习

本文主要介绍了生成式AI的最新发展&#xff0c;提到了GPT-5和AI软件工程师在行业中的影响&#xff0c;指出AI技术进步对国家竞争和个人职业发展的潜在影响。 未来已来 最近有两则新闻&#xff1a; sam altman自曝GPT-5细节&#xff0c;公开宣称GPT-5提升将非常大&#xff0c;任…

Flink集群部署

Flink集群部署 快速上手 创建maven工程&#xff0c;JDK1.8&#xff0c;导入相关依赖 <properties><flink.version>1.17.0</flink.version></properties><dependencies><dependency><groupId>org.apache.flink</groupId><…

【校招VIP】25届一本备战策略

一、24届基本结束&#xff0c;数据总结 1 一本就业涵盖所有层次&#xff0c;包括大厂、中厂和小公司 双非一本在校招开发岗中是最特别的一种学校背景&#xff0c;涵盖了校招就业的所有层次&#xff1a; 有少数同学能脱颖而出&#xff0c;成功进入大厂工作&#xff0c;月薪20K&a…

Unity射击游戏开发教程:(5)使用 GetComponent 在 Unity 中进行脚本通信

我认为脚本通信是刚开始使用 Unity 时较难掌握的概念之一,我将继续讨论这个概念。在本文中,我将介绍如何在游戏对象发生碰撞时使用 GetComponent 来访问另一个脚本。 在这个游戏场景中,我有两个游戏对象,它们都有自己的脚本,需要进行通信。我们有玩家脚本和敌人脚本。Enem…

Python自学篇2-导入Win32库

Python导入win32模块 导入win32模块可以让我们在Python中使用Windows的API功能&#xff0c;这对于开发需要与Windows操作系统进行交互的应用程序非常有用。 本文将介绍如何导入win32模块&#xff0c;并提供一些代码示例来帮助读者更好地理解。 什么是win32模块&#xff1f; …

FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡

FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡 一、板卡概述 该板卡为了考虑兼容1.8V电平IO&#xff0c;适配Virtex7&#xff0c;Kintex Ultrascale&#xff0c;Virtex ultrasacle FPGA而特制&#xff0c;如果要兼容原来的3.3V 也可以修改硬件参数。板卡支持1路…

OceanBase数据库日常运维快速上手

这里为大家汇总了从租户创建、连接数据库&#xff0c;到数据库的备份、归档、资源配置调整等&#xff0c;在OceanBase数据库日常运维中的操作指南。 创建租户 方法一&#xff1a;通过OCP 创建 确认可分配资源 想要了解具体可分配的内存量&#xff0c;可以通过【资源管理】功…

图像处理之LBP特征(C++)

图像处理之LBP特征&#xff08;C&#xff09; 文章目录 图像处理之LBP特征&#xff08;C&#xff09;前言一、LBP特征描述二、圆形LBP特征三、LBPH特征描述四、代码实现1.LBP实现2.圆形LBP实现3.LBPH实现 总结 前言 LBP(Local Binary Pattern)指局部二值模式&#xff0c;是一种…