React Native导入victory-native报Super expression must either be null or a function错误
问题根因
你遇到的Super expression must either be null or a function报错,本质是从victory-native导入的VictoryLegend、VictoryPie组件不是合法的React组件构造对象,最核心的触发原因是victory-native版本和当前项目的React、Expo SDK版本不兼容。
排查步骤
- 先验证缓存问题:执行
expo r -c命令清除Expo所有缓存后重启项目,排查是否是缓存导致的依赖加载异常,如果报错仍存在,确认是版本兼容问题。 - 缩小问题范围:把导入语句改成仅导入单个组件测试,比如只保留
import { VictoryPie } from "victory-native",确认是否是单个组件导出问题还是整个包的兼容问题。 - 核对依赖版本匹配规则:victory-native从36.x版本开始要求React >=17.0.0,你当前使用的React 16.13.1、Expo SDK42无法适配高版本victory-native,即使是35.3.3版本也存在和Expo SDK42的已知导出兼容缺陷。
解决方案
方案1:降级victory-native到适配版本(优先选择,改动最小)
直接卸载当前版本,安装和Expo SDK42、React 16.13.1完全兼容的34.x稳定版:
npm uninstall victory-native npm install victory-native@34.3.0
安装完成后再次执行expo r -c清除缓存重启项目即可解决问题。
方案2:升级项目依赖适配高版本victory-native
如果需要使用35.x以上版本victory-native的新功能,可以升级你的Expo SDK版本到44及以上,配套升级React到17.0.1+版本,同时更新react-native-svg到对应Expo版本匹配的版本即可适配。
方案3:临时绕过兼容问题
如果不想修改依赖版本,可以修改导入语句直接从子路径导入组件,绕过根导出的兼容问题:
import VictoryPie from "victory-native/lib/components/victory-pie"; import VictoryLegend from "victory-native/lib/components/victory-legend";
该方法仅适合临时调试使用,不建议长期在生产项目中使用。
内容的提问来源于stack exchange,提问作者Sabbir Hussain Meraj
相关产品推荐
相关产品推荐

