expo-quick-actions Hooks实战:useQuickAction与useQuickActionCallback如何选?一篇讲透

发布时间:2026/11/1 12:43:39
expo-quick-actions Hooks实战:useQuickAction与useQuickActionCallback如何选?一篇讲透 expo-quick-actions Hooks实战useQuickAction与useQuickActionCallback如何选一篇讲透【免费下载链接】expo-quick-actionsAdd home screen quick actions / shortcuts and custom icons to your Expo app项目地址: https://gitcode.com/gh_mirrors/ex/expo-quick-actionsexpo-quick-actions 是一个为 Expo 应用添加主屏幕快捷操作Quick Actions和动态应用图标的开源库。本文聚焦它最常被问到的问题两个 Hook ——useQuickAction和useQuickActionCallback—— 到底有什么区别、怎么选。读完这篇你就能在项目中一次性用对它们。什么是 Quick Actions为什么需要 Hooks长按手机桌面图标iOS 长按、Android 长按会弹出应用自定义的快捷入口比如新建聊天搜索拍照。expo-quick-actions 用一套 API 帮你设置快捷项setItems定义快捷操作的标题、图标、参数监听启动事件用户点了哪个快捷项、带着什么参数启动应用通过 Hooks 拿到动态换图标expo-quick-actions/icon子模块可运行时切换应用图标。核心 API 定义在 src/index.ts它暴露了initial冷启动时命中的快捷项、maxCount最大快捷项数量、setItems、isSupported和addListener。两个 Hooks 就是对initial addListener这套组合的封装定义在 src/hooks.ts。两个 Hook 一图看懂核心差异对比项useQuickActionuseQuickActionCallback返回值当前快捷项对象Action \| null无只注册回调会触发组件重渲染吗✅ 会每次快捷项变化都 setState❌ 不会事件在回调里处理典型场景用快捷项数据更新界面导航跳转、埋点统计、全局状态冷启动时命中快捷项通过initial自动读入立即以initial调用一次回调一句话总结要改 UI 用useQuickAction只做事不改 UI 用useQuickActionCallback。useQuickActionCallback不重渲染的事件处理器看 src/hooks.ts 的注释写得很直白它防止组件因操作变化而整体重渲染。内部用useEffect订阅原生事件组件卸载时自动取消订阅并处理了冷启动的initial事件你无需重复处理。适合放在布局组件、全局容器、Provider里做导航、埋点这类全局行为import { useQuickActionCallback } from expo-quick-actions/hooks; function Layout() { useQuickActionCallback((action) { // 全局行为跳转或打点不影响任何界面渲染 console.log(快捷项被触发:, action); }); // ... }为什么不重渲染很重要如果把监听放进一个页面组件并让它重渲染每次用户从快捷项进入都会导致整棵组件树刷新。回调式监听把副作用隔离在事件处理里是更轻量的做法。useQuickAction让界面直接响应快捷项当快捷项的参数本身要驱动 UI比如根据params高亮某个 Tab、展示对应内容就用它。它会返回最近一次启动应用的快捷项没有则为nullimport { useQuickAction } from expo-quick-actions/hooks; function Home() { const action useQuickAction(); // action 变化时组件重渲染据此更新界面 return action ? Detail action{action} / : Welcome /; }官方示例 example/App.tsx 就是这么写的const action useQuickAction()然后把 action 的 JSON 直接渲染到页面上非常直观的演示。实战决策3 个信号快速选型遇到需求时按顺序问自己拿到快捷项后要不要改变界面要 →useQuickAction只是导航 / 埋点 / 发请求→useQuickActionCallback项目在用 Expo Router优先用 src/router.ts 提供的useQuickActionRouting它内部就是基于回调实现的只要快捷项带params.href就会自动router.navigate到对应路由还能传自定义 callback 拦截处理。// app/(root)/_layout.tsx import { useQuickActionRouting } from expo-quick-actions/router; export default function Layout() { useQuickActionRouting(); // 快捷项 params.href 直接变成路由跳转 return Slot /; }⚠️ 官方提醒useQuickActionRouting应放在子布局app/(root)/_layout.tsx而不是根布局因为它会触发导航。别忘了先设置快捷项再监听两个 Hook 只是接收端。发送端是setItems在应用启动时配置一次即可QuickActions.setItems([ { id: compose, title: 新建, icon: compose, params: { href: /compose } }, { id: search, title: 搜索, icon: search, params: { href: /search } }, ]);配合 Config Pluginplugin/src/index.ts还能在app.json里声明静态的 Android 自适应图标、iOS 图标与 iOS 静态快捷项示例项目 example/app.json 给了完整配置参考。常见问题FAQQ1冷启动时用户从快捷项进入回调会触发吗会。两个 Hook 都会检查QuickActions.initial冷启动命中的快捷项会被补发一次不会丢事件。Q2能同时使用两个 Hook 吗可以但没必要在同一个组件里混用。推荐分工全局布局里挂useQuickActionCallback做导航具体页面里用useQuickAction做界面响应。Q3Web 端会报错吗不会。src/index.web.ts 提供了空实现isSupported返回false事件监听为 no-op可安全跨端引用。总结改 UI →useQuickAction只做副作用 →useQuickActionCallback这是唯一的选型主线用 Expo Router 的项目直接用useQuickActionRouting一行代码打通快捷项 → 路由别忘了先setItems再谈监听。掌握这套组合你的 Expo 应用就能拥有原生的主屏幕快捷入口和动态图标体验。【免费下载链接】expo-quick-actionsAdd home screen quick actions / shortcuts and custom icons to your Expo app项目地址: https://gitcode.com/gh_mirrors/ex/expo-quick-actions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询