Taro-03-页面生命周期

React:

TypeScript 复制代码
useEffect(() => {
}, []);

只能监听:

复制代码
组件挂载
组件卸载

但小程序页面有:

复制代码
进入页面
离开页面
返回页面
切后台
切前台

所以 Taro 提供页面生命周期。


useLoad

页面加载

TypeScript 复制代码
// 跳转:/pages/test/index?id=123&from=home
useLoad((options) => {
  console.log(options.id);    // '123'(字符串)
  console.log(options.from);  // 'home'
});

注意:

  1. 路由 query 是平铺在 options 上的,不是 options.query.id(那是 App 级 onShow 的结构)。
  2. 值都是字符串(微信规范),用时自己转类型。
  3. Taro 会额外注入 $taroTimestamp,用于页面实例标识,一般可忽略。
  4. 触发时会同步更新 Current.routerparams 来自这些路由参数。

相当于:

复制代码
页面第一次创建
只执行一次,但「页面实例」可能重建
  • navigateTo 返回:同一页面实例还在栈里 → useLoad 不会再执行,只会 useDidShow
  • redirectTo / reLaunch / 出栈后再进:页面销毁重建 → useLoad 会再执行。

所以:「只执行一次」指的是「这个页面实例的生命周期内」。


useReady

页面渲染完成

TypeScript 复制代码
useReady(() => {
});

类似:

复制代码
componentDidMount

useDidShow

重点:这里的 options 是 启动/展示参数,结构更接近 App 的 onShow

TypeScript 复制代码
useDidShow((options?: {
  path: string
  query: Record<string, any>  // 注意:这里是 query 对象
  scene: number
  shareTicket: string
  referrerInfo: { appId?, extraData? }
  // 还有 forwardMaterials、chatType、apiCategory 等
}) => {
// there is some code
});

每次进入页面都会触发。

例如:

复制代码
A
 ↓
B
 ↑
A

回来时:

复制代码
useDidShow

再次执行。


实际开发:

复制代码
useShow(() => {
  getUserInfo();
});

比:

复制代码
useEffect(() => {}, [])

更常见。


useDidHide

页面隐藏

复制代码
useDidHide(() => {
});

例如:

复制代码
A
 ↓
B

A触发:

复制代码
useDidHide

useUnload

页面销毁

复制代码
useUnload(() => {
});

对应:

复制代码
页面真正出栈

生命周期顺序

第一次进入:

复制代码
useLoad
 ↓
useReady
 ↓
useShow

离开(页面不可见):

复制代码
useHide

页面出栈销毁(切后台不会触发):

复制代码
useUnload

其他页面级 Hook(文档里常略过)
Hook 参数 用途 备注
usePullDownRefresh 下拉刷新 需在 index.config.tsenablePullDownRefresh
useReachBottom 触底加载 可配 onReachBottomDistance
usePageScroll { scrollTop } 页面滚动
useResize 尺寸/方向变化 横竖屏等
useShareAppMessage 分享对象 转发给朋友 用了才会注册,影响右上角菜单
useShareTimeline 分享对象 分享到朋友圈 同上
useTabItemTap { index, pagePath, text } Tab 被点击 仅 Tab 页
useAddToFavorites 收藏配置 点「收藏」 主要 weapp
useSaveExitState 返回 { data, expireTimeStamp? } 页面被回收前存状态 主要 weapp

App 级 Hook(写在 app.ts,不是页面)
Hook 参数 对应
useLaunch LaunchOptions App.onLaunch,冷启动一次
useDidShow LaunchOptions? App.onShow,切前台也会触发
useDidHide App.onHide
useError error: string 脚本错误
useUnhandledRejection { reason, promise } 未处理的 Promise
usePageNotFound { path, query, isEntryPage } 页面不存在
相关推荐
To_OC16 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
浮生望17 小时前
React 受控与非受控组件:从表单状态管理到实时校验的完整实践
前端
明朝百晓生17 小时前
Deep RL learning[2026/8]
开发语言·javascript·人工智能
糖墨夕18 小时前
第二章:AI Agent 到底是个啥?—— 用生活场景把概念讲明白
前端
Csvn18 小时前
⚡ content-visibility: auto —— 长页面渲染提速的隐藏神器,白捡的性能优化
前端
用户9385156350718 小时前
ESLint 代码规范完全指南——从 AST 原理到 flat config 逐行解析
javascript·后端·代码规范
用户9385156350718 小时前
深入理解 Next.js:从 SPA 的 SEO 问题到约定式路由与 SSR 原理
前端·后端·全栈
snow@li18 小时前
web:前端500知识点/速查手册
前端
kyriewen20 小时前
今年裁了16万技术人——但字节前端岗反而涨了23%
前端·javascript·面试
用户0595401744620 小时前
把 AI Agent 记忆存储验证从 40 分钟手测压到 3 分钟,pytest + Docker 这套组合太顶了
前端·css