Vue 3组合式函数处理异步请求需封装状态与逻辑:用ref定义data、loading、error响应式变量;封装带try/catch/finally的execute函数;按需手动或自动触发;避免竞态、toRefs误用及错误返回Promise。

Vue 3 组合式函数处理异步请求,关键在于把“状态”和“逻辑”一起封装,用 ref 管数据、async/await 控流程、显式执行函数 触发请求——不靠自动执行,而靠结构清晰的协作。
定义响应式状态:提前建好追踪链
在函数开头就创建好三个核心响应式变量,确保后续赋值能触发视图更新:
-
data = ref(null):存最终结果,初始值可设为
null、[]或默认对象 - loading = ref(false):控制骨架屏、按钮禁用、加载图标等 UI 行为
- error = ref(null):捕获错误并透出,方便上层统一提示或重试
封装执行函数:带 try/catch/finally 的标准流程
把请求逻辑包进一个 async 函数里,支持传参、可手动调用,生命周期管理要闭环:
Element Plus Vue3 桌面组件库。在开发 Vue 3.x 页面时调用,使用 Element Plus 组件(如 el-button、el-input、el-form、el-table 等)。
- 开始前:置
loading.value = true,清空旧error和data - 成功后:赋值
data.value = response.data(注意是否需解构) - 失败时:赋
error.value = err,建议throw err让调用方决定是否拦截 - 结束时:
loading.value = false必须放在finally块,避免遗漏
控制执行时机:按场景选自动 or 手动
要不要一进来就发请求,得看业务需要:
- 需立即加载:在组合式函数里调用
onMounted(() => execute()),但要确认execute不依赖未就绪的 props 或 reactive 对象 - 需用户触发或带参数:只暴露
execute函数,由组件绑定到按钮或输入框变化事件上 - 参数变化时重载:配合
watch监听响应式参数(如搜索关键词),自动调用execute
避开常见坑:竞态、toRefs、Promise 返回
实际封装时容易踩几个典型问题:
-
竞态问题:快速切换参数(如连点搜索)导致旧请求返回覆盖新结果。可用
AbortController中断,或加个简单计数器比对请求序号 -
toRefs 误用:若直接解构返回对象(如
const { data, loading } = useAsyncData(...)),会丢失响应性;必须用toRefs或保持对象访问 -
不返回 Promise:组合式函数本身不该
return execute(),否则无法手动控制;应返回{ data, loading, error, execute }这样的对象
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










