当前位置: 首页 > news >正文

Taro Hooks 完整分类详解

Taro Hooks 完整分类详解

Taro 提供了一系列强大的 Hooks 来帮助开发者更好地管理小程序和 H5 应用的生命周期、用户交互和系统事件。本文将按照功能类型对这些 Hooks 进行详细分类讲解。

📱 生命周期类 Hooks

页面生命周期

useLoad

页面加载时触发,只会触发一次。可以在此获取页面参数。

import { useLoad } from '@tarojs/taro'useLoad((options) => {console.log('页面加载完成', options)// 获取页面参数const { id } = options
})
useReady

页面初次渲染完成时触发,只会触发一次。

import { useReady } from '@tarojs/taro'useReady(() => {console.log('页面渲染完成')// 可以安全地获取节点信息
})
useUnload

页面卸载时触发,如 redirectTo 或 navigateBack 到其他页面时。

import { useUnload } from '@tarojs/taro'useUnload(() => {console.log('页面即将卸载')// 清理定时器、取消请求等
})

应用生命周期

useLaunch

小程序初始化完成时触发,全局只触发一次。

import { useLaunch } from '@tarojs/taro'useLaunch((options) => {console.log('小程序启动', options)// 初始化全局数据
})
useDidShow

页面显示/切入前台时触发。

import { useDidShow } from '@tarojs/taro'useDidShow(() => {console.log('页面显示')// 刷新数据、恢复播放器等
})
useDidHide

页面隐藏/切入后台时触发。

import { useDidHide } from '@tarojs/taro'useDidHide(() => {console.log('页面隐藏')// 暂停播放、保存状态等
})

👆 用户交互类 Hooks

滚动相关

usePageScroll

监听用户滑动页面事件。

import { usePageScroll } from '@tarojs/taro'usePageScroll((res) => {console.log('滚动位置', res.scrollTop)// 实现吸顶效果、懒加载等
})
useReachBottom

页面上拉触底事件的处理函数。

import { useReachBottom } from '@tarojs/taro'useReachBottom(() => {console.log('到达页面底部')// 加载更多数据loadMoreData()
})
usePullDownRefresh

监听用户下拉刷新事件。

import { usePullDownRefresh } from '@tarojs/taro'usePullDownRefresh(() => {console.log('触发下拉刷新')// 刷新数据refreshData().then(() => {Taro.stopPullDownRefresh()})
})
usePullIntercept

下拉截断时触发(仅微信小程序支持)。

import { usePullIntercept } from '@tarojs/taro'usePullIntercept(() => {console.log('下拉被截断')// 可以在此处理自定义下拉刷新逻辑
})

点击事件

useTabItemTap

点击 tab 时触发(仅 TabBar 页面)。

import { useTabItemTap } from '@tarojs/taro'useTabItemTap((item) => {console.log('点击了 tab', item.index, item.pagePath)// 可以在此处理 tab 点击逻辑
})
useTitleClick

点击标题时触发(仅支付宝小程序支持)。

import { useTitleClick } from '@tarojs/taro'useTitleClick(() => {console.log('点击了标题')// 可以在此处理标题点击逻辑
})
useOptionMenuClick

点击导航栏额外图标时触发(仅支付宝小程序支持)。

import { useOptionMenuClick } from '@tarojs/taro'useOptionMenuClick(() => {console.log('点击了额外图标')// 可以在此处理额外图标点击逻辑
})

📤 分享相关 Hooks

基础分享

useShareAppMessage

用户点击右上角菜单"转发"按钮时的处理函数。

import { useShareAppMessage } from '@tarojs/taro'useShareAppMessage((res) => {if (res.from === 'button') {// 来自页面内转发按钮console.log(res.target)}return {title: '自定义转发标题',path: '/pages/index/index?id=123',imageUrl: '/static/share.jpg'}
})
useShareTimeline

用户点击右上角菜单"分享到朋友圈"按钮时的处理函数(仅微信小程序支持)。

import { useShareTimeline } from '@tarojs/taro'useShareTimeline(() => {return {title: '分享到朋友圈的标题',query: 'id=123&from=timeline',imageUrl: '/static/timeline.jpg'}
})
useAddToFavorites

用户点击右上角菜单"收藏"按钮时的处理函数(仅微信小程序支持)。

import { useAddToFavorites } from '@tarojs/taro'useAddToFavorites(() => {return {title: '收藏标题',imageUrl: '/static/favorite.jpg',query: 'id=123'}
})

🔄 系统事件类 Hooks

窗口变化

useResize

窗口尺寸变化时触发。

import { useResize } from '@tarojs/taro'useResize((res) => {console.log('窗口尺寸变化', res.size)// 适配不同屏幕尺寸
})

状态保存

useSaveExitState

保存当前页面状态,当用户通过系统返回按钮返回时恢复状态(仅微信小程序支持)。

import { useSaveExitState } from '@tarojs/taro'useSaveExitState(() => {return {scrollTop: 100,data: this.data}
})

⚠️ 错误处理类 Hooks

全局错误

useError

小程序发生脚本错误或 API 调用报错时触发。

import { useError } from '@tarojs/taro'useError((error) => {console.error('发生错误', error)// 错误上报reportError(error)
})
useUnhandledRejection

小程序有未处理的 Promise 拒绝时触发。

import { useUnhandledRejection } from '@tarojs/taro'useUnhandledRejection((res) => {console.error('未处理的 Promise 拒绝', res.reason, res.promise)// 可以在此处理全局错误
})
usePageNotFound

小程序要打开的页面不存在时触发。

import { usePageNotFound } from '@tarojs/taro'usePageNotFound((res) => {console.log('页面不存在', res.path, res.query)// 可以重定向到 404 页面Taro.redirectTo({ url: '/pages/404/index' })
})

🛣️ 路由相关 Hooks

useRouter

获取当前页面路由参数。

import { useRouter } from '@tarojs/taro'const router = useRouter()
console.log('当前页面参数', router.params)
// 使用参数
const { id } = router.params

💡 最佳实践建议

1. 组合使用示例

import { useLoad, useReady, useDidShow, useDidHide } from '@tarojs/taro'function Index() {// 页面加载时获取参数useLoad((options) => {console.log('页面参数', options)})// 页面渲染完成后初始化useReady(() => {console.log('页面渲染完成')})// 页面显示时刷新数据useDidShow(() => {console.log('页面显示,刷新数据')})// 页面隐藏时保存状态useDidHide(() => {console.log('页面隐藏,保存状态')})
}

2. 性能优化建议

  • 避免在 Hooks 中执行耗时操作
  • 合理使用防抖和节流
  • 及时清理副作用(如定时器、事件监听)

3. 平台兼容性

  • 注意不同平台的支持差异
  • 使用条件编译处理平台特有功能
  • 提供降级方案

📋 平台支持对照表

Hook微信小程序支付宝小程序百度小程序QQ小程序H5RN
useDidShow
useDidHide
usePullDownRefresh
useReachBottom
usePageScroll
useResize
useShareAppMessage
useTabItemTap
useAddToFavorites
useShareTimeline
useSaveExitState
useLaunch
useError
useUnhandledRejection
usePageNotFound
useLoad
useUnload
useReady
useRouter
useTitleClick
useOptionMenuClick
usePullIntercept
http://www.dtcms.com/a/315707.html

相关文章:

  • 深度解析随机森林 API:参数奥秘与调优指南
  • 在AI时代,如何制定有效的职业规划?AI时代职业规划+AI产品经理角色
  • 【学习笔记】NTP时间同步验证
  • Kali Linux 2025.2基于MITRE ATTCK框架
  • DPU(数据处理单元)架构中,SoC(系统级芯片)与FPGA(现场可编程门阵列)之间的数据交互
  • 山东移动e企组网技术分析:底层架构与实现方式
  • 第12届蓝桥杯Scratch_选拔赛_初级组_真题2020年11月21日
  • SpringBoot3.x入门到精通系列:4.2 整合 Kafka 详解
  • Linux第十二讲:线程概念与控制
  • 前端保持和服务器时间同步的方法【使用vue3举例】
  • Qt 音频播放全攻略:常用函数、实战示例与资源获取
  • 升级 Elasticsearch 到新的 AWS Java SDK
  • 基于LDA主题的网络舆情与情感分析——以云南某景区话题为例
  • 8.5 CSS3多列布局
  • 继承知识总结
  • 【AI】提示词与自然语言处理:从NLP视角看提示词的作用机制
  • 【Lua】题目小练8
  • TrackVLA——开放世界下的四足具身视觉跟踪EVT(智能跟随):集目标识别与轨迹规划为一体的VLA,不怕高动态与遮挡
  • JavaWeb02——基础标签及样式(黑马视频笔记)
  • 扩展欧拉定理以及练习题
  • 嵌入式 - 数据结构:循环链表和内核链表
  • 【Unity笔记】Unity TextMeshPro 字体显示为方块的终极解决方案(含中文、特殊字符支持)
  • 如何查看PCI卡的VID,DID,SVID,SSID编号
  • Google AI 发布 MLE-STAR:一款能够自动执行各种 AI 任务的先进机器学习工程代理
  • cf.训练
  • Prometheus 监控平台部署 (云原生环境)
  • Docker Compose管理新范式:可视化控制台结合cpolar提升容器编排效率?
  • 从零开始学网页开发:HTML、CSS和JavaScript的基础知识
  • C++ 多线程(三)
  • 嵌入式学习的第四十三天-ds18b20 数字温度传感器