跳转到主内容
思享编程网:思考分享,玩转编程世界!

uni-app页面通信与刷新,除了onShow,还有哪些高招?

嘿,编程的小伙伴们,你们在开发uni-app的时候,有没有遇到过页面间通信和数据刷新的难题?别急,今天就来跟你们聊聊这个话题,让你轻松解决uni-app页面通信与刷新的烦恼。

1. 理解uni-app页面生命周期

uni-app的页面生命周期和Vue组件的生命周期很像,但是uni-app针对移动端页面导航做了一些特别的优化。搞清楚这些生命周期钩子函数,是管理页面状态的关键。

  • onLoad:页面初次加载时触发,适合做一次性初始化操作。
  • onShow:页面显示时触发,包括初次显示和从其他页面返回时。
  • onReady:页面初次渲染完成时触发。
  • onHide:页面隐藏时触发(跳转到其他页面或进入后台)。
  • onUnload:页面卸载时触发。
export default {
  onLoad(options) {
    console.log('页面加载,参数:', options)
    this.loadInitialData()
  },
  onShow() {
    console.log('页面显示')
    this.refreshData()
  },
  onHide() {
    console.log('页面隐藏')
  },
  methods: {
    loadInitialData() {
      // 初始化数据加载
    },
    refreshData() {
      // 刷新数据
    }
  }
}

1.2 onShow的适用场景与局限

onShow是最常用的页面刷新触发点,但它有几个明显的局限:

  • 性能问题:每次页面显示都会触发,可能导致不必要的重复请求。
  • 上下文缺失:无法区分是初次显示还是从特定页面返回。
  • 数据一致性:无法感知其他页面的数据变更。

提示:对于简单的数据刷新需求,onShow确实是最直接的解决方案,但在复杂场景下需要考虑更精细的控制。

2. 全局事件总线(EventBus)实现松耦合通信

当应用涉及多个页面间复杂交互时,全局事件总线提供了一种更灵活的通信方式。

2.1 实现基础EventBus

// utils/eventBus.js
class EventBus {
  constructor() {
    this.events = {}
  }
  
  on(event, callback) {
    if (!this.events[event]) {
      this.events[event] = []
    }
  }

更多精彩内容,尽在「思享编程网」(www.sxgpb.com),我是陆砚码,我们下期再见!

相关文章