Не удается прочитать свойство 'string' из undefined | React.PropTypes | LayoutPropTypes.js

После удаления и переустановки моей папки node_modules у меня возникла проблема, которую я не понимаю в файле LayoutPropTypes.js.

В node_modules/react-native/Libraries/StyleSheet/LayoutPropTypes.js Следующая переменная undefined: var ReactPropTypes = require('React').PropTypes;

реакция-родная: 0.45.1 реагировать: 16.0.0-alpha.12

Ответ 1

React.PropTypes теперь устарели:

Примечание. React.PropTypes устарел с версии React v15.5. Пожалуйста, используйте prop-types.

Вам нужно добавить пакет prop-types отдельно. Вероятно, ошибка появилась только потому, что вы удалили папку node_modules, а затем переустановили все, что обновило версию react.

Ответ 2

Вы абсолютно уверены, что используете реакцию 16.0.0-alpha.12?

Проверьте package.json, если у вас есть ^ перед реакционной версией, если у вас есть, вероятно, установлена ​​последняя версия ответа, которая в настоящее время 16.0.0-alpha.13, в которой она ломается, как вы говорите (только сама проблема). Имея ^ перед версией, он позволяет устанавливать более новые версии и исправления. Подробнее об этом читайте здесь.

Чтобы сохранить его в указанной вами точной версии, просто удалите ^ перед версией, чтобы ваш package.json выглядел следующим образом:

  "dependencies": {
    "react": "16.0.0-alpha.12",
    "react-native": "0.45.1",
  }

Не забудьте повторно установить node_modules после изменений.

Ответ 3

React больше не поставляется с PropTypes. Вам нужно будет установить его.

Сначала установите пакет prop-types, запустив npm i prop-types --save.

Затем используйте пакет 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>
    )
}

Ответ 4

У меня есть аналогичная проблема, нет решения. Ответы, говорящие о пакете "prop-types", бессмысленны, проблема исходит из исходного кода. Это не возможность вручную исправлять собственный источник в папке node_modules.

Ответ 5

Теперь вы можете обновить для реагирования 0.46.4, просто следуйте этому руководству: https://facebook.github.io/react-native/docs/upgrading.html

my package.json выглядит так:

"react": "16.0.0-alpha.12",
"react-native": "0.46.4",

Ответ 6

вместо определения значения для компонента следующим образом: propName: React.PropTypes.string

Определите, как это propName: PropTypes.string

и, наконец, сохранить его.