React Native升级后迁移stripe出现interpolate未定义报错如何解决
报错原因与排查方案
你这个报错本质是动画库的API不兼容,和Stripe本身完全无关,你注释StripeProvider后依然报错的现象也能佐证这一点,问题出在你为了适配react-native-stripe升级React Native版本的时候,连带升级的动画相关依赖有破坏性变更。
根因说明
interpolate is not a function是React Native生态中动画库版本不兼容的典型报错:
React Native自带的Animated库,以及生态常用的react-native-reanimated库在版本迭代中修改了插值API的调用方式:
- react-native-reanimated 1.x版本使用
AnimatedValue.interpolate()写法 - react-native-reanimated 2.x版本废弃了上述写法,早期2.x版本替换为
interpolateNode(),后续版本改为共享值调用interpolate的新写法 - 若你升级的React Native版本要求更高版本的react-native-reanimated,而项目中存在还在使用旧版插值写法的代码/第三方依赖,就会抛出该错误
排查步骤
- 首先确认你当前项目安装的react-native-reanimated版本,执行命令
npm list react-native-reanimated或yarn list react-native-reanimated查看版本号 - 查看报错的完整堆栈,定位调用
interpolate的具体来源:如果是你自己写的自定义动画代码,按照当前reanimated版本的要求修改插值写法即可;如果是第三方依赖调用的,将对应依赖升级到适配你当前reanimated版本的最新稳定版即可 - 常见的触发报错的第三方依赖包括旧版的react-native-screens、react-native-gesture-handler、CodePush UI封装组件、MobX相关的UI组件库,你可以优先排查这些依赖的版本兼容性
为什么加了StripeProvider后才出现报错
react-native-stripe本身依赖react-native-reanimated、react-native-gesture-handler等动画相关库,你在升级适配的过程中大概率同步更新了这些依赖的版本,只是刚好在配置完StripeProvider后运行才发现问题,和Stripe的代码本身没有关联。
内容的提问来源于stack exchange,提问作者Mark Lloyd
相关产品推荐
相关产品推荐

