小程序的生命周期

小程序的生命周期分为 应用生命周期 (整个小程序)和 页面生命周期(单个页面),由框架自动触发,开发者可以通过对应的钩子函数进行逻辑处理。

1. 应用生命周期(App 生命周期)

app.js 中定义,管理整个小程序的生命周期。

示例代码(app.js

javascript 复制代码
App({
  onLaunch(options) {
    console.log('小程序初始化', options);
    // 获取用户信息、初始化全局数据
  },
  onShow(options) {
    console.log('小程序显示', options);
    // 重新加载数据
  },
  onHide() {
    console.log('小程序隐藏');
    // 清理操作
  },
  onError(error) {
    console.error('小程序出错:', error);
    // 错误上报
  },
  onPageNotFound(res) {
    console.log('页面不存在:', res.path);
    wx.redirectTo({ url: '/pages/home/index' }); // 跳转到首页
  }
});

2. 页面生命周期(Page 生命周期)

page.js 中定义,管理单个页面的生命周期。

示例代码(page.js

javascript 复制代码
Page({
  data: { text: 'Hello' },
  
  onLoad(options) {
    console.log('页面加载', options); // 获取路由参数
    this.loadData();
  },
  onShow() {
    console.log('页面显示');
  },
  onReady() {
    console.log('页面渲染完成');
  },
  onHide() {
    console.log('页面隐藏');
  },
  onUnload() {
    console.log('页面卸载');
  },
  
  // 下拉刷新
  onPullDownRefresh() {
    console.log('下拉刷新');
    this.loadData(() => wx.stopPullDownRefresh());
  },
  
  // 上拉触底
  onReachBottom() {
    console.log('触底加载');
    this.loadMoreData();
  },
  
  // 页面滚动
  onPageScroll(e) {
    console.log('滚动位置:', e.scrollTop);
  },
  
  // 分享
  onShareAppMessage() {
    return { title: '分享标题', path: '/pages/index/index' };
  },
  
  loadData(callback) {
    // 模拟异步请求
    setTimeout(() => {
      this.setData({ text: '数据已更新' });
      callback?.();
    }, 1000);
  }
});

3. 组件生命周期(Component 生命周期)

自定义组件也有自己的生命周期,类似 Page,但更细化:

示例代码(自定义组件)

javascript 复制代码
Component({
  lifetimes: {
    created() { console.log('组件创建'); },
    attached() { console.log('组件挂载'); },
    ready() { console.log('组件渲染完成'); },
    detached() { console.log('组件移除'); }
  },
  methods: {
    // 自定义方法
  }
});

总结

  • 应用生命周期App):管理整个小程序(初始化、前后台切换)。

  • 页面生命周期Page):管理单个页面(加载、显示、卸载、滚动、分享等)。

  • 组件生命周期Component):管理自定义组件(创建、挂载、销毁)。

掌握生命周期有助于在合适的时机执行逻辑(如初始化数据、清理资源、优化性能)。

相关推荐
Aniugel9 分钟前
单点登录(SSO)系统
前端
鹏多多13 分钟前
移动端H5项目,还需要react-fastclick解决300ms点击延迟吗?
前端·javascript·react.js
serioyaoyao14 分钟前
上万级文件一起可视化,怎么办?答案是基于 ParaView 的远程可视化
前端
万少20 分钟前
端云一体 一天开发的元服务-奇趣故事匣经验分享
前端·ai编程·harmonyos
WindrunnerMax22 分钟前
从零实现富文本编辑器#11-Immutable状态维护与增量渲染
前端·架构·前端框架
不想秃头的程序员24 分钟前
Vue3 封装 Axios 实战:从基础到生产级,新手也能秒上手
前端·javascript·面试
说私域26 分钟前
日本零售精髓赋能下 链动2+1模式驱动新零售本质回归与发展格局研究
人工智能·小程序·数据挖掘·回归·流量运营·零售·私域运营
数研小生38 分钟前
亚马逊商品列表API详解
前端·数据库·python·pandas
你听得到1139 分钟前
我彻底搞懂了 SSE,原来流式响应效果还能这么玩的?(附 JS/Dart 双端实战)
前端·面试·github
不倒翁玩偶40 分钟前
npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
前端·npm·node.js