javascript - 在 v16.x 中使用来自旧版本 React 的 React 组件时出现问题

标签 javascript reactjs

我对 React 比较陌生,但在过去一周发现它很有成效。但我遇到了一个难题。

我使用 create-react-app CLI 构建了一个新项目,其中包含最新的 React v16.x 和相关包。但是,我正在从事的项目还需要许多其他内部项目使用的内部包(因此我不能只是去改变事情)。它是用 React v15.x 构建的。

这就是问题所在:当我从内部包导入一个组件时,我遇到了 React v16 的问题,该问题已弃用 React.PropTypes 语法(这是在 React v15.x 中仍然可用)。

TypeError: Cannot read property 'oneOf' of undefined

上述 undefined 的上下文是旧版 v15 React 模块中的 React.PropTypes.oneOf(...)

那么我如何才能两全其美呢?继续在项目中使用 v16.x,同时能够利用来自另一个时代 (v15.x) 的包中的组件?

谢谢!

最佳答案

下面是基于我留下的评论的答案:

在大多数情况下,如果您坚持使用 React 15.x,直到您所依赖的代码也更新为 16.x,这是一个更安全的选择。只需确保在自己的代码中使用 prop-types 包,这样您以后就不必再次执行相同的迁移。

对于遗留代码,您可以开始安装 prop-types 包并更改其架构以使用它。而不是:

import React from 'react';

Something.propTypes = {
  name: React.PropTypes.string
};

使用:

import PropTypes from 'prop-types';

Something.propTypes = {
  name: PropTypes.string
};

通过简单的查找/替换,这应该非常容易,您的团队和维护人员会感谢您:)

关于javascript - 在 v16.x 中使用来自旧版本 React 的 React 组件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199994/

相关文章:

javascript - 如何防止嵌套的 Promise 挂起?

javascript - 如何使用javascript计算太阳下点的纬度(即太阳赤纬)?

javascript - Flex 子元素在非常小的宽度上消失

javascript - 如何在点击时显示当前状态

javascript - 我想要一些盒子来填满所有东西,我正在使用 Twitter Bootstrap

javascript - 将一列与 pdfmake 和数据表对齐

javascript - 强制浏览器只刷新 1 个文件

reactjs - 我可以在不触发重新渲染的情况下更新 redux 存储中的属性吗?

javascript - 相邻的 JSX 元素必须包裹在一个封闭的标签中 React Native

javascript - 如何更改reactjs中子组件某些部分的所有状态