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 } 页面不存在
相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄2 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95272 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大2 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师2 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端