前端开发
在 React Native/Expo 中用…
当需要在 React Native 或 Expo 应用中实现状态过渡、布局、手势、滚动、worklet、取消与无障碍替代动效时,按驱动类型选择正确 API 并完整验证交互。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 React Native/Expo 特定
解决思路
- 按驱动选择方案:状态变化用 CSS transitions,挂载/重排用 layout animations,手势/滚动/物理用 shared values 和 worklets。
- 把业务状态保留在 React/应用状态中,把逐帧值排除在 React 渲染之外。
- 不要给本就不需要动画的交互强行加动画。
- 安装任何东西前先读取 package 和 lockfile、原生架构/配置及相关组件。
- 使用包管理器的依赖树命令和当前兼容性指南核对版本;已声明的包不等于其原生二进制或 Babel 插件匹配。
- 本技能面向 Reanimated 4 和 RNGH 3;若应用不在该栈上,选择有支持的升级或留在已安装 API 内,不要混用 API 代际或添加兼容包装。
- Expo 项目使用其 SDK 特定的安装解析,而不是把每个原生包独立升级到最新。
- 不要使用旧的字符串匹配 setup 检查器,改用实际依赖/构建证据而非 'OK' 打印。
- 定义完整交互状态:初始、激活、完成、取消、中断、禁用和 reduced-motion 状态。
- 覆盖布局边界、方向/尺寸变化、多点触控以及导航/卸载。
- 选择明确的目标状态,而不是根据进行中的动画值是否非零来切换。
- Gesture Handler 3 的 onDeactivate 接收带 canceled 的事件,而不是旧的第二个成功参数。
- 仅在手势成功后执行提交动作,并处理即使从未激活也要做的清理。
- 动画完成不等于后端变更成功;在动作挂起时防止重复提交,并在应用状态中反映真实失败/恢复。
- 保持 worklet 闭包小;仅在函数定义于 React Native 运行时(如导航或应用回调)时使用 scheduleOnRN。
- 不要把在 worklet 内创建的函数当作属于 JS 来传递。
- UI worklet 仍运行在 UI 线程:昂贵计算会阻塞渲染。
- 在 timing、spring、layout 和 CSS 路径中尊重系统 reduced-motion 策略。
- Reanimated 的 useReducedMotion() 只报告启动时设置,不是实时订阅;若需运行时变更,使用应用的反应式 AccessibilityInfo 订阅并在清理时移除监听器。
- 为拖拽/滑动操作提供非手势替代操作,并保留标签、焦点、禁用状态和命中区域。
- 视觉上被平移的视图仍需正确的交互和无障碍几何。
- 在卸载、离屏、进入后台或 reduced motion 禁用时停止装饰性循环/帧回调,并重置到有意义的静态状态。
- 不要让无障碍依赖特定帧率或退出动效的完成。
- 对锁定栈下的实际组件做类型检查。
- 演练成功、取消、中断、重复激活、挂起/错误结果、reduced motion、屏幕阅读器替代方案及受支持平台。
- 在代表性硬件上对接近 release 的构建做性能分析;UI 线程执行不保证 60/120 fps。
- 使用 Hermes 兼容的调试方式,而不是 JSC Remote JS Debugging。
- 报告补丁、所选驱动/API、实际运行的测试及剩余设备检查。
- 不要用依赖字符串或 mock 动画作为原生运行时证据。
适用边界 · 注意事项
- 应用不在 Reanimated 4 / RNGH 3 栈上且未做有支持的升级时。
- 需要 Web Motion 或给普通视图添加 canvas 图形时。
- 无法在设备或模拟器构建上做原生验证时。