vue3.0中setup中異步轉(zhuǎn)同步的實現(xiàn)
vue3 setup中異步轉(zhuǎn)同步
vue3中setup前加上async后頁面不顯示
**問題描述 **在開發(fā) vue3 中,因為通過接口數(shù)據(jù)為異步函數(shù)獲取,導致最后數(shù)據(jù)無法成功賦值進 return 中的數(shù)據(jù)。所以需要setup函數(shù)異步轉(zhuǎn)同步,后設置了async 后異步轉(zhuǎn)同步,結(jié)果導致頁面空白不顯示。
解決問題 在Vue3中,如果當前組件的setup使用了async/await,那么其調(diào)用組件的父組件的外層需要嵌套一個suspense標簽,例如:
異步組件:
子組件
HTML
<template> ? ? <div>······</div> </template>
JS
export default {
? ? async setup () {
? ? ? ? let ···
? ? ? ? // 接口A
? ? ? ? await getAAA().then(() => {
? ? ? ? ? ? ···
? ? ? ? }).catch(() => {
? ? ? ? ? ? ···
? ? ? ? })
? ? ? ? // 接口B
? ? ? ? await getBBB().then(() => {
? ? ? ? ? ? ···
? ? ? ? }).catch(() => {
? ? ? ? ? ? ···
? ? ? ? })
? ? ? ? return {
? ? ? ? ? ? ···
? ? ? ? }
? ? }
}父組件中需要單獨設置
<suspense> ? ? <async-component/> </suspense>
使用vue3中的異步
在vue3中使用ajax請求數(shù)據(jù)的時候,由于不能在setup前面使用async,使用后會導致return的返回值全部變成promise的返回值,所以在執(zhí)行的時候得使用一些特定的鉤子來發(fā)送請求
和vue2一樣,選擇在dom節(jié)點渲染完成的時候發(fā)送請求,
(getdata為封裝的數(shù)據(jù))
![]()

這樣寫完之后會發(fā)現(xiàn)


頁面顯示沒有數(shù)據(jù),但是tableData卻可以顯示數(shù)來數(shù)據(jù),但是因為vue的承諾是相應式數(shù)據(jù)發(fā)生改變,頁面就會重新渲染,所以是tabledata的響應式被替換成了不能響應的數(shù)據(jù)
把數(shù)據(jù)壓入原來的設置成響應式的數(shù)組就可以檢測到了


以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue 實現(xiàn)顯示/隱藏層的思路(加全局點擊事件)
這篇文章主要介紹了Vue 實現(xiàn)顯示/隱藏層的思路(加全局點擊事件),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12
Element Table 自適應高度的實現(xiàn)示例
el-table的高度不能適應不同電腦的分辨率,也不能跟隨瀏覽器的高度變化而變化的問題,本文就來解決一下Element Table 自適應高度,感興趣的可以了解一下2024-07-07
vue3項目+element-plus:時間選擇器格式化方式
這篇文章主要介紹了vue3項目+element-plus:時間選擇器格式化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

