无法读取未定义的属性“字符串”| React.PropTypes | LayoutPropTypes.js
Posted
技术标签:
【中文标题】无法读取未定义的属性“字符串”| React.PropTypes | LayoutPropTypes.js【英文标题】:Cannot read property 'string' of undefined | React.PropTypes | LayoutPropTypes.js 【发布时间】:2017-11-18 06:48:43 【问题描述】:删除并重新安装我的 node_modules 文件夹后,我在 LayoutPropTypes.js 文件中遇到了一个我不理解的问题。
在node_modules/react-native/Libraries/StyleSheet/LayoutPropTypes.js
以下变量未定义:var ReactPropTypes = require('React').PropTypes;
反应原生:0.45.1 反应:16.0.0-alpha.12
【问题讨论】:
【参考方案1】:React.PropTypes is now deprecated:
注意:React.PropTypes 自 React v15.5 起已弃用。请使用 代替 prop-types 库。
您现在需要单独添加prop-types 包。该错误很可能刚刚开始出现,因为您删除了 node_modules
文件夹,然后重新安装了升级 react
版本的所有内容。
【讨论】:
我已经在我的项目中添加了道具类型,但我仍然有这个问题。我试图重新安装节点,它没有用。而现在,我什至无法运行 react native 的演示。我想知道如何降级 react 的版本? 通过重启计算机修复:( @NicolasMeienbergeryarn add react@16.0.0-alpha.12
【参考方案2】:
你确定你使用的是 react 16.0.0-alpha.12
?
检查你的 package.json 是否在 react 版本之前有 ^
,如果有,它可能已经安装了最新的 react 版本,目前是 16.0.0-alpha.13
,其中正如你所说的那样休息(我自己也遇到了问题)。在版本之前有^
,允许它安装更新的次要版本和补丁版本。 You can read more about it here.
要使其保持在您指定的确切版本,只需删除版本之前的^
,这样您的 package.json 就会如下所示:
"dependencies":
"react": "16.0.0-alpha.12",
"react-native": "0.45.1",
请记住在更改后重新安装您的 node_modules。
【讨论】:
我在 alpha.13 中遇到了同样的问题,当回到 alpha.12 就可以了!【参考方案3】:我有类似的问题,没有解决方案。谈论'prop-types'包的答案是没有意义的,问题来自react-native source code。这不是手动修复 node_modules 文件夹中的 react native 源的选项。
【讨论】:
我不完全理解的是,如果我用react-native init
创建一个新应用程序,那么应用程序运行良好。【参考方案4】:
现在您可以更新到 react-native 0.46.4,只需按照本指南进行操作: https://facebook.github.io/react-native/docs/upgrading.html
我的 package.json 看起来像这样:
"react": "16.0.0-alpha.12",
"react-native": "0.46.4",
【讨论】:
【参考方案5】:React 不再附带 PropTypes。您将需要安装它。
首先通过运行npm i prop-types --save
安装prop-types
包。
接下来在你的组件中使用prop-types
包,如下所示:
import React from 'react'
import PropTypes from 'prop-types'
export const AwesomeComponent = props =>
return(
<h1>Hello props.name</h1>
)
AwesomeComponent.propTypes =
name: PropTypes.string.isRequired
或者,如果您正在使用这样的 Typescript,则只需使用接口:
import * as React from 'react'
interface IAwesomeComponentProps
name: string
export const AwesomeComponent: React.FC<IAwesomeComponentProps> = props =>
return(
<h1>Hello props.name</h1>
)
【讨论】:
【参考方案6】:而不是像这样定义组件的值: propName: React.PropTypes.string
这样定义 propName: PropTypes.string
最后保存。
【讨论】:
以上是关于无法读取未定义的属性“字符串”| React.PropTypes | LayoutPropTypes.js的主要内容,如果未能解决你的问题,请参考以下文章
无法读取未定义的属性“字符串”| React.PropTypes | LayoutPropTypes.js
未捕获的类型错误:无法读取未定义的属性“toUpperCase”
TypeError:将google-tag-manager添加到reactjs站点时无法读取未定义的属性“字符串”