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

React Native报错:Undefined is not an object(evaluating '_react3.default.PropType.shape')求解决

解决 "Undefined is not an object(evaluating '_react3.default.PropType.shape')" 错误

这个错误的根源很明确:React 16+ 已经把 PropTypes 从核心库中移除,需要使用单独的 prop-types 包,但你依赖的 react-native-admob@1.3.2 是比较旧的版本,它内部仍在尝试访问 React.PropTypes,导致找不到该属性而报错。

结合你的配置(React 16.3.1、RN 0.55.3、已安装 prop-types@15.6.1),这里有几个可行的解决方法,按推荐优先级排序:

方法一:给 react-native-admob 打补丁(推荐)

使用 patch-package 工具修改依赖库的代码,让它适配单独的 prop-types 包,步骤如下:

  1. 安装 patch-package 开发依赖:
    npm install patch-package --save-dev
    
  2. 找到 node_modules/react-native-admob 中所有使用 React.PropTypes 的文件(比如 src/AdMobBanner.js、src/AdMobInterstitial.js 等):
    • 在文件顶部添加 PropTypes 的导入:
      import PropTypes from 'prop-types';
      
    • 将所有 React.PropTypes 替换为 PropTypes(比如 React.PropTypes.shape 改成 PropTypes.shape)
  3. 生成补丁文件:
    npx patch-package react-native-admob
    
    这会在项目根目录生成 patches/react-native-admob+1.3.2.patch 文件,以后每次执行 npm install 时,补丁会自动应用。

方法二:临时全局挂载 PropTypes(应急用)

如果暂时不想打补丁,可以在项目入口文件(比如 index.js)中添加以下代码,把单独的 prop-types 挂载到 React 对象上,让旧库能找到它:

import React from 'react';
import PropTypes from 'prop-types';

// 临时挂载,适配旧库的 React.PropTypes 引用
React.PropTypes = PropTypes;

⚠️ 注意:这个方法是临时 workaround,可能会和其他依赖产生冲突,不建议长期使用。

方法三:升级依赖库(需注意兼容性)

尝试升级 react-native-admob 到支持 prop-types 单独包的版本,但要注意新版本和你的 RN 0.55.3 是否兼容。你可以查看该库的版本日志,找一个适配 RN 0.55.x 的更新版本,然后执行:

npm install react-native-admob@合适的版本号 --save

如果找不到兼容的版本,还是优先选择方法一。

内容的提问来源于stack exchange,提问作者krkmzugur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:51:14