【微信小程序开发】wx.showLoading 和 wx.showToast 同时只能显示一个,你知道吗

  • 原创
  • 作者:程序员三丰
  • 发布时间:2026-03-24 16:28
  • 浏览量:5
根据官方开发文档,wx.showToast 与 wx.showLoading 不能同时使用。文档明确指出:“wx.showLoading 和 wx.showToast 同时只能显示一个”。如果需要切换提示类型,应先隐藏当前显示的提示(如调用 wx.hideLoading 或 wx.hideToast),再调用另一个提示接口。

wx.showToastwx.showLoading 不能同时使用。它们共用同一个底层弹窗组件,后调用的会直接覆盖先调用的。

📌 核心机制对比

先来快速看下两者的区别:

方法 说明 关闭方式
wx.showLoading 显示加载提示框,通常用于网络请求等耗时操作。 必须主动调用 wx.hideLoading 关闭。
wx.showToast 显示消息提示框,常用于操作结果反馈,一段时间后自动消失。 调用 wx.hideToast 或等待 duration 参数设定的时间后自动关闭。

⚠️ 常见问题与解决方案

最常见的冲突场景是:你在发起网络请求前显示了 Loading,然后在请求的回调中想显示一个 Toast。如果处理不当,Toast 可能会不显示或一闪而过。

❌ 错误示例

wx.showLoading({ title: '加载中...' });
wx.request({
  // ...
  success: (res) => {
    // 错误:直接调用showToast,最后又被complete里的hideLoading关闭了
    wx.showToast({ title: '请求成功' });
  },
  complete: () => {
    wx.hideLoading(); // 这里会把上面的Toast也一并关掉
  }
});

✅ 正确做法:先关闭 Loading,再显示 Toast

wx.showLoading({ title: '加载中...' });
wx.request({
  // ...
  success: (res) => {
    wx.hideLoading();         // 1. 先手动关闭Loading
    wx.showToast({            // 2. 再显示Toast
      title: '请求成功',
      icon: 'success'
    });
  },
  fail: (err) => {
    wx.hideLoading();         // 失败时也建议先关闭Loading
    wx.showToast({
      title: '请求失败',
      icon: 'error'
    });
  }
  // 注意:complete回调里不要再调用wx.hideLoading(),否则可能会重复关闭
});

💎 进阶思路:封装一个管理器

如果你的项目中多处需要处理这种顺序,可以考虑封装一个简单的提示管理器,通过状态控制来避免冲突。核心思路是给Toast更高的优先级:

  1. 显示Toast时:如果Loading正在显示,先将其隐藏。
  2. 显示Loading时:如果Toast正在显示,则忽略此次Loading调用。

这样可以确保最终用户看到的是最重要的提示信息。

希望这些能帮你更好地处理小程序的提示交互。

声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://mp.51blog.xyz/article/114.html

文章归档

推荐文章

buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas vue3 three.js 微信支付 PHP全栈开发 Python AI 人工智能 AI生成 工作经验 实战笔记