Uniapp onLoad 和 onShow 区别

一、核心区别
生命周期触发时机执行次数参数获取
onLoad页面首次创建时触发仅1次支持获取URL参数options
onShow页面每次显示时触发(包括返回)多次无法获取URL参数
二、实战数据请求场景

优先使用onLoad请求数据的场景:

  1. 初始化数据
    当需要根据URL参数初始化页面时(如商品详情页的ID):

    onLoad(options) {
      // 获取URL参数(如:/pages/detail?id=123)
      const id = options.id; 
      this.loadProductDetail(id); // 根据ID请求数据
    }
    

  2. 静态数据加载
    只需加载一次且不会变化的数据(如文章内容、配置信息):

    onLoad() {
      this.fetchArticleContent(); // 文章内容不会频繁更新
    }
    

  3. 耗时初始化操作
    需要提前执行的复杂计算或大数据请求:

    onLoad() {
      this.initMapData(); // 加载地图数据(只需一次)
    }
    

应使用onShow的场景:

onShow() {
  // 1. 需要实时更新的数据(如购物车数量)
  this.refreshCartCount(); 
  
  // 2. 从编辑页返回时刷新列表
  if (this.isFromEditPage) {
    this.reloadList();
  }
}

三、决策流程图
graph TD
A[需要数据吗?] --> B{是否依赖URL参数?}
B -->|是| C[使用onLoad]
B -->|否| D{数据需要实时更新?}
D -->|是| E[使用onShow]
D -->|否| F[使用onLoad]

四、最佳实践建议
  1. 组合使用方案

    onLoad(options) {
      // 初始化核心数据(依赖参数)
      this.loadCoreData(options.id); 
    }
    onShow() {
      // 补充实时数据(如用户状态)
      this.updateUserStatus(); 
    }
    

  2. 避免在onShow中重复请求
    通过缓存机制防止返回页面时重复加载:

    data() {
      return { hasLoaded: false }
    },
    onLoad() {
      this.loadData();
      this.hasLoaded = true;
    },
    onShow() {
      if (!this.hasLoaded) this.loadData();
    }
    

关键结论:当数据请求依赖URL参数只需加载一次时,优先使用onLoad;需要响应页面可见性变化时使用onShow。两者配合使用可兼顾初始化效率和实时性需求。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值