You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:34:02