60 秒回答模板

小程序生命周期要分三层回答。App 层的 onLaunch 做一次性初始化,onShow/onHide 处理应用前后台切换;Page 层的 onLoad 读取路由参数并做首次初始化,onShow 处理每次进入页面都要刷新的数据,onReady 表示首次渲染完成,onHide/onUnload 分别处理页面隐藏和销毁;Component 层的 created/attached/ready/detached 管内部状态、挂载后的查询和资源释放。实际开发中,首屏数据、订阅、定时器、全局状态和页面缓存都要按生命周期边界放置,否则容易重复请求、内存泄漏或返回页面数据不刷新。

考点 核心机制与工程取舍
难度 中高频面试题
回答目标 按定义、机制、场景讲清楚

深入解析

01

先按层级拆开

App 生命周期描述应用整体,Page 生命周期描述路由页面,Component 生命周期描述可复用组件。回答时先分层,再讲每个阶段适合做什么,比背一串函数名更有价值。

02

App 层负责全局初始化

onLaunch 适合读取本地登录态、初始化 SDK、拉取基础配置和建立全局 store。onShow/onHide 更适合处理前后台切换,例如恢复埋点会话、刷新红点、暂停或恢复全局任务。

03

Page 层区分首次进入和每次显示

onLoad 只在页面实例创建时执行,适合解析 options、初始化页面状态和发起首屏请求。onShow 每次页面可见都会执行,适合从详情页返回后刷新列表、检查登录态和重建临时订阅。

04

渲染完成和销毁各有职责

onReady 表示首次渲染完成,适合做节点查询、创建 canvas 或依赖 DOM 尺寸的逻辑。onHide 是暂时不可见,onUnload 是页面销毁,定时器、事件监听、WebSocket 订阅和外部资源要按生命周期清理。

05

Component 层关注复用边界

created 阶段不要依赖页面节点;attached 表示组件进入页面树,适合初始化和订阅;ready 后可安全做布局查询;detached 必须释放组件自己的监听器、定时器和异步副作用。

06

避免生命周期和数据流混乱

不要把所有请求都塞进 onShow,也不要把依赖路由参数的初始化放到组件内部猜测。页面负责参数和业务数据,组件通过 properties 接收输入,通过事件把交互结果传出去。

易错点

  • 只背生命周期函数名,不说明 App、Page、Component 的职责边界。
  • 把首次路由参数解析放到 onShow,导致返回页面时重复初始化并覆盖用户状态。
  • 定时器、订阅和监听只创建不清理,页面多次进入后产生重复回调和内存泄漏。
  • 在组件 created 阶段访问节点尺寸或依赖页面参数,导致时机不稳定和组件复用性差。

面试官追问

onLoad 和 onShow 最大区别是什么?

onLoad 是页面实例创建时执行一次,适合解析路由参数和首次初始化;onShow 是每次页面显示都会执行,适合返回刷新和前台恢复。

onHide 和 onUnload 清理策略一样吗?

不完全一样。onHide 是暂时隐藏,可以暂停轮询和动画;onUnload 是页面销毁,要彻底移除监听、清空定时器和释放页面级资源。

组件什么时候可以查询节点尺寸?

通常要等到 ready 之后,因为 created/attached 阶段不保证视图层完成渲染。依赖布局尺寸的逻辑不要过早执行。

为什么不能所有接口都放 onShow?

onShow 会在返回页面、切前台等场景重复触发,容易导致重复请求和闪动。只有每次可见都必须更新的数据才适合放 onShow。