由于未定义 PropTypes.node,React 应用程序崩溃

React App Crashing Due to undefined PropTypes.node

我 运行 今天在处理 node.js + 基于 react 的项目时遇到了一个问题,该项目是用 react v.15.0.0 创建的,它有几个不推荐使用的功能,所以我升级了项目以使用反应 v.16.2.0。

现在它崩溃了,不能再用 webpack 编译了:(

我收到的错误消息是:

    TypeError: Cannot read property 'node' of undefined
[3]     at Object.defineProperty.value (/Volumes/Develop/MyPortfolio/edward/dist/server.js:528:40)
[3]     at __webpack_require__ (/Volumes/Develop/MyPortfolio/edward/dist/server.js:20:30)
[3]     at Object.<anonymous> (/Volumes/Develop/MyPortfolio/edward/dist/server.js:406:22)
[3]     at __webpack_require__ (/Volumes/Develop/MyPortfolio/edward/dist/server.js:20:30)
[3]     at Object.defineProperty.value (/Volumes/Develop/MyPortfolio/edward/dist/server.js:342:16)
[3]     at __webpack_require__ (/Volumes/Develop/MyPortfolio/edward/dist/server.js:20:30)
[3]     at Object.<anonymous> (/Volumes/Develop/MyPortfolio/edward/dist/server.js:185:14)
[3]     at __webpack_require__ (/Volumes/Develop/MyPortfolio/edward/dist/server.js:20:30)
[3]     at Object.defineProperty.value (/Volumes/Develop/MyPortfolio/edward/dist/server.js:56:16)
[3]     at __webpack_require__ (/Volumes/Develop/MyPortfolio/edward/dist/server.js:20:30)
[3] [nodemon] app crashed - waiting for file changes before starting...

我追溯到 /my project/dist/server.js 文件,这是导致崩溃的行:

ExternalLink.propTypes = {
      children: _react2.default.PropTypes.node
    };

并且 _react2 声明为:

var _react = __webpack_require__(3);

var _react2 = _interopRequireDefault(_react);

我做了一些研究,发现 React 16.x 有一个单独的类型检查包 'Prop-Types',我实际上试过用这样的新功能交换旧功能:

   var _propType = require("prop-types");

    ExternalLink.propTypes = {
      children: _propType.default.PropTypes.node
    };

仍然不走运,我现在一头雾水,如果有人可以就此提供建议或解决方法,我将不胜感激。谢谢。

这对我有用:

var _propType = require("prop-types");

ExternalLink.propTypes = {
  children: _propType.node
};

我正在使用 create-react-app 并将 ES6 模块导入与此 CommonJS 语法交换工作正常

您只需要使用 _propTypes.node 而不是 _propType.default.PropTypes.node

var _propType = require("prop-types");

ExternalLink.propTypes = {
 children: _propType.node
};

从 React 16 开始,PropTypes 被拆分到它自己的包中,该包的默认导出是 PropTypes 对象,因此您只需直接使用它而不是查找 .default.PropTypes.