React Native导出Expo报错:undefined is not an object (evaluating '_react3.PropTypes.bool')
解决React Native更新后
_react3.PropTypes.bool报错问题 这个问题我之前帮不少开发者排查过,大概率不是你的代码问题——你自己没用到PropTypes,但你项目里的第三方依赖库可能还在使用React内置的PropTypes!
从React 16.3版本开始,官方已经把PropTypes从React核心包中移除,单独拆成了prop-types这个独立包。那些没及时更新的老依赖库,还在尝试从React.PropTypes里取相关类型,自然就会抛出undefined is not an object的错误。
下面给你一步步的排查和解决方案:
1. 先定位出问题的依赖库
- 看错误栈线索:仔细看报错信息里的调用栈,通常会显示错误来自
node_modules/[某个包名]/xxx.js,这个包名就是“罪魁祸首”。 - 逐个排除测试:如果错误栈不够清晰,可以尝试临时移除最近添加的依赖,每次移除后重新运行项目,看哪个依赖被移除后报错消失,那它就是问题所在。
2. 针对性解决问题
方案一:更新问题依赖到兼容版本
找到问题库后,去它的npm页面或者GitHub仓库查更新日志,找支持React 16.3+的版本,然后执行更新命令:
# npm用户 npm update [问题包名] --save # yarn用户 yarn upgrade [问题包名]
这是最推荐的方案,从根源解决依赖兼容问题。
方案二:临时全局注入PropTypes(应急方案)
如果某些依赖已经停止维护没法更新,可以临时在项目入口文件(比如App.js或index.js)的最顶部加这段代码,给React对象手动补上PropTypes:
import React from 'react'; import PropTypes from 'prop-types'; // 给React挂载PropTypes,让老库能找到它 React.PropTypes = PropTypes;
注意:这只是临时的 workaround,不建议长期使用,尽量还是优先更新依赖。
方案三:检查Expo与RN的版本匹配
因为你是把项目导出到Expo,还要确认Expo SDK版本和你的React Native版本是否严格对应——Expo对RN版本有固定的适配关系,版本不兼容也可能引发这类依赖问题。可以执行expo upgrade来自动升级到匹配的SDK版本,或者手动对照Expo的版本表调整。
额外排查小技巧
- 清理缓存:有时候旧的缓存会残留过时代码,导致报错一直存在,试试这些命令:
# 清理npm缓存 npm cache clean --force # 清理Metro缓存(RN/Expo通用) npx react-native start --reset-cache # 或者Expo快速清理缓存 expo r -c
- 检查babel插件:如果项目用了自定义babel配置,看看有没有过时的转换插件,这些插件可能错误处理了依赖中的PropTypes引用,尝试更新babel相关依赖到最新版本。
内容的提问来源于stack exchange,提问作者Chris Henry
相关产品推荐
相关产品推荐

