Expo SDK42搭配react-native 0.66.1出现NativeAnimatedModule报错如何解决
报错原因
此类NativeAnimatedModule相关方法不存在的报错本质为版本不兼容问题,根因分为三类:
- Expo SDK与react-native版本不匹配:Expo SDK 42官方仅支持适配react-native 0.63.x版本,你手动升级到react-native 0.66.1后,高版本react-native新增的Animated原生API没有被Expo SDK 42的原生桥接层实现,导致调用时找不到对应方法
- 临时补丁破坏依赖逻辑:你之前使用的修改node_modules源码的临时修复方案,仅屏蔽了
startOperationBatch的报错,破坏了Animated模块的内部调用链,后续调用其他API(比如getValue)时就会触发连锁报错 - 第三方依赖冲突:如果你的项目中引入了依赖
react-native-reanimated的动画、手势类第三方组件,Expo 42内置的reanimated v1版本和高版本react-native的Animated模块不兼容,也会触发这类报错
永久解决方案
- 方案1:降级react-native到官方适配版本
将package.json中react-native的版本改为0.63.4,删除node_modules、yarn.lock/package-lock.json文件后重新安装依赖,再执行expo prebuild --clear重建原生项目即可,无需修改任何依赖源码 - 方案2:升级Expo SDK到匹配版本
将Expo SDK升级到44版本,该版本官方默认适配react-native 0.66.x,内置的Animated桥接层完整支持0.66.x的所有Animated原生API,升级完成后清除之前对node_modules源码的修改补丁即可正常运行 - 方案3:临时兜底方案(损失动画性能)
如果你暂时无法完成版本升降级,可以在项目入口文件(如App.js)最顶部添加如下配置,强制所有Animated动画使用JS驱动,绕开原生模块调用:import { Animated } from 'react-native'; Animated.injectConfig({ useNativeDriver: false });
内容的提问来源于stack exchange,提问作者Bharanitharan Sakthivel
相关产品推荐
相关产品推荐

