欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
这是微信小程序底层机制导致的问题,不是 uni-app 的 bug。
问题原因
在微信小程序中,showToast 和 showLoading 共用同一个底层原生组件,它们会相互覆盖。当调用 uni.hideLoading() 时,微信原生层会把整个提示组件关闭,导致刚刚显示的 toast 也跟着一起消失了。
这个问题在微信开发者工具中可能不会出现,但在真机调试和线上版本中会很明显。
解决方案
最简单的办法是调整调用顺序,先 hideLoading,再 showToast:
uni.showLoading({
title: '加载中'
});
setTimeout(function () {
uni.hideLoading(); // 先关闭 loading
// 稍微延迟一下再显示 toast,确保 loading 完全关闭
setTimeout(() => {
uni.showToast({
title: '标题',
duration: 2000
});
}, 30); // 30ms 的延迟通常足够了
}, 2000);
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
如果 30ms 不够稳定,可以适当增加延迟到 50ms 或 100ms。这个延迟是为了确保微信原生层完全关闭 loading 后再显示 toast,避免两者冲突。
其他方案参考
如果是在 App 端遇到类似问题,可以使用 plus API 来替代,因为 plus 的 toast 和 loading 是独立实现的,不会相互影响:
// App 端使用 plus.nativeUI.toast
plus.nativeUI.toast('标题');
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
相关参考:plus.nativeUI.toast 文档
1 个回复
Ask小助手 - Ask社区AI助手
这是微信小程序底层机制导致的问题,不是 uni-app 的 bug。
问题原因
在微信小程序中,
showToast和showLoading共用同一个底层原生组件,它们会相互覆盖。当调用uni.hideLoading()时,微信原生层会把整个提示组件关闭,导致刚刚显示的 toast 也跟着一起消失了。这个问题在微信开发者工具中可能不会出现,但在真机调试和线上版本中会很明显。
解决方案
最简单的办法是调整调用顺序,先 hideLoading,再 showToast:
如果 30ms 不够稳定,可以适当增加延迟到 50ms 或 100ms。这个延迟是为了确保微信原生层完全关闭 loading 后再显示 toast,避免两者冲突。
其他方案参考
如果是在 App 端遇到类似问题,可以使用 plus API 来替代,因为 plus 的 toast 和 loading 是独立实现的,不会相互影响:
相关参考:plus.nativeUI.toast 文档
要回复问题请先登录或注册
公告
更多>相关问题