使用react-native-camera@0.6时遭遇PropTypes相关报错的技术求助
解决react-native-camera@0.6与RN0.55.2的PropTypes报错问题
这个报错的根源很明确:你用的react-native-camera@0.6版本太老了,它的内部代码仍然在依赖React.PropTypes,但React Native 0.55.x已经把PropTypes从React核心包中移除,需要单独安装prop-types包使用。你自己在App.js里导入PropTypes没用,因为问题出在第三方库的代码里,不是你的业务代码。
下面给你几个可行的解决方案,按推荐程度排序:
方案1:使用patch-package修改库代码(推荐)
这个方法可以在不修改node_modules源码的前提下,给react-native-camera打一个本地补丁,以后每次安装依赖都会自动应用这个修改:
- 首先安装patch-package工具:
npm install patch-package --save-dev - 找到
node_modules/react-native-camera目录下所有用到React.PropTypes的文件(比如Camera.js、RNCamera.js等),做两处修改:- 在文件顶部添加PropTypes的导入:
import PropTypes from 'prop-types'; - 将文件中所有的
React.PropTypes替换为PropTypes
- 在文件顶部添加PropTypes的导入:
- 修改完成后,在项目根目录运行命令生成补丁:
npx patch-package react-native-camera - 之后你的项目里会生成一个
patches目录,里面保存着这个修改补丁,后续执行npm install或yarn install时,patch-package会自动把这个补丁应用到react-native-camera上。
方案2:全局挂载PropTypes到React(临时hack)
如果你不想折腾补丁,可以在App.js的最顶部添加一段代码,把PropTypes挂载到React对象上,让老库能找到它:
import React from 'react'; import PropTypes from 'prop-types'; // 临时挂载,让react-native-camera能找到React.PropTypes React.PropTypes = PropTypes;
这个方法简单粗暴,但属于hack手段,不推荐长期使用,后续最好还是升级库或者用方案1的补丁方式。
方案3:升级react-native-camera到兼容版本
如果条件允许,你可以尝试升级react-native-camera到适配RN0.55.2的版本。比如可以查找react-native-camera的版本历史,找到明确支持RN0.55.x的版本(比如0.13.x系列),然后安装对应版本:
npm install react-native-camera@0.13.0 --save
注意升级后可能需要重新link依赖(RN0.55.x还需要手动link):
react-native link react-native-camera
内容的提问来源于stack exchange,提问作者Shibin Raju Mathew
相关产品推荐
相关产品推荐

