无法读取未定义的属性“字符串”| 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 的版本? 通过重启计算机修复:( @NicolasMeienberger yarn 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站点时无法读取未定义的属性“字符串”

我该如何解决这个问题:未捕获的类型错误:无法读取 javascript 中未定义的属性“toString”

TypeError:无法读取未定义的属性“then”

遍历对象数组-TypeError:无法读取未定义的属性“名称”