vue处理异步状态的逻辑useAsyncState

embedded/2024/10/22 17:23:33/

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/embedded/11878.html

相关文章

Qt | 鼠标事件第四节

Qt | 事件第一节Qt | 事件第二节

Idea如何本地调试线上测试服务器代码?

线上出现问题&#xff0c;但是没加日志打印拍脑门惋惜为啥不多打一行日志 加日志重新部署&#xff0c;半小时没了&#xff0c;问题还没有找到&#xff0c;头顶的灯却早已照亮了整层楼...... 排查别人线上的 bug&#xff0c;不仅代码还没看懂&#xff0c;还没一行日志&#…

【驱动】AM437x中出现很多bioset进程,杀不掉,有影响吗?

1、问题描述 查看linux系统进程时,发现很多bioset进程 2、问题分析 1)bioset进程是内核线程 这些bioset进程与Linux内核的块I/O(Block Input/Output)层有关,它们是内核线程,不是用户空间的进程。 Linux的块I/O层负责管理磁盘和其他块设备的数据传输。当系统读写磁盘…

Spring(下)

接上篇&#xff0c;从第八个问题讲起 八.Spring工厂创建复杂对象 1.什么是复杂对象 简单对象就是可以直接new出来的&#xff0c;也就是直接调用构造方法创建 所以复杂对象就是不能直接通过调用构造方法创建。就比如JDBC中的Connection 2.三种方法 &#xff08;1&#xff…

光伏无人机勘探技术应用分析

光伏无人机勘探与传统勘探想必&#xff0c;具有智能化作业、测控精度高、环境适应性强等明显优势&#xff1b;卫星勘探辅助其能更快速甚至实时完成测绘拼图&#xff1b;在进行勘察时&#xff0c;可根据需要自由更换机载设备&#xff1b;自动诗经建模使数据更直观&#xff0c;工…

Fisher判别示例:鸢尾花(iris)数据(R)

先读取iris数据&#xff0c;再用程序包MASS&#xff08;记得要在使用MASS前下载好该程序包&#xff09;中的线性函数lda()作判别分析&#xff1a; data(iris) #读入数据 iris #展示数据 attach(iris) #用变量名绑定对应数据 library(MASS) #加载MASS程序包 ldlda(Species~…

springcloud alibaba 整合seata的TCC

一、seata服务端搭建同上篇。 Seata的AT模式客户端两阶段提交流程源码分析 二、seata客户端的结构 1.示例DEMO工程 下单&#xff0c;扣余额&#xff0c; 减库存。 2. MAVEN配置。 父工程&#xff1a;由于spring-cloud-starter-alibaba-seata依赖的seata-spring-boot-starter…

Uni-App 生命周期

在 Uni-App 中&#xff0c;页面和组件都有自己的生命周期函数&#xff0c;以下是一些常用的生命周期函数&#xff1a; 页面生命周期函数&#xff1a; onLoad: 页面加载时触发 onShow: 页面显示时触发 onReady: 页面初次渲染完成时触发 onHide: 页面隐藏时触发 onUnload: …