superMAX1024
superMAX1024
  • 发布:2024-05-01 15:46
  • 更新:2024-05-21 11:02
  • 阅读:124

uniapp Composition API 写法,onLaunch和onLoad的异步问题最新解决方案,简单易懂

分类:uni-app

在使用 uni-app 开发项目时,会遇到需要在 onLaunch 中请求接口返回结果,并且此结果在项目各个页面的 onLoad 中都有可能使用到的需求,比如微信小程序在 onLaunch 中进行登录后取得 openid 并获得 token,项目各页面需要带上该 token 请求其他接口。

在onLaunch 中的请求是异步的,也就是说在执行 onLaunch 后页面 onLoad 就开始执行了,而不会等待 onLaunch 异步返回数据后再执行,这就导致了页面无法拿到 onLaunch 中异步获取的数据。

使用custom-hooks-plus库可以完美的帮我解决这个问题。

可以定义一个全局变量

// global.ts 文件  
import { proxyData } from 'custom-hooks-plus'  

interface GlobalData {  
  token: string  
  userInfo: number  
}  

export const globalData = proxyData({  
  token: '',  
})  

export function set<K extends keyof GlobalData>(key: K, val: GlobalData[K]) {  
  globalData[key] = val  
}  

export function get<K extends keyof GlobalData>(key: K): GlobalData[K] {  
  return globalData[key]  
}
// App.vue  
import { init } from 'custom-hooks-plus';  

init(  
  {  
    Token: {  
      key: 'token', // 监听global文件中globalData的token的变化  
    }  
  }  
);  

onLaunch(() => {  
  uni.login((res) => {  
    // 进行登录操作,修改globalData中的token  
  })  
})
// 页面中使用  
import { onCustomLoad, onCustomShow } from 'custom-hooks-plus';  

onCustomLoad((options) => {  
  console.log('globalData的token都被修改了才会触发');  
}, ['Token']);

通过上面的代码实现了,页面中的onCustomLoad的回调会等token有值后再执行,完美的解决了onLaunch和onLoad的异步问题。

具体可看:https://github.com/DBAAZzz/custom-hooks-plus

2 关注 分享
hws007 DCloud_UNI_OttoJi

要回复文章请先登录注册

superMAX1024

superMAX1024 (作者)

2024-05-21 11:02
superMAX1024

superMAX1024 (作者)

顶。。。。
2024-05-04 11:58