【问题标题】:How to read the value of propTypes of my Button component如何读取我的 Button 组件的 propTypes 的值
【发布时间】:2017-08-10 04:06:40
【问题描述】:

我需要一个可以返回任何 React 组件的 propTypesdefaultProps 的函数,以便显示这样的表格:

我创建了以下函数来读取propTypesdefaultProps

function getInfo(component) {
  console.log('propTypes', component.propTypes)
  console.log('defaultProps', component.defaultProps)
}

复制

https://www.webpackbin.com/bins/-KfXIWlTGcgSo-GeNAFR

预期 && 结果

记录 propTypes 和 defaultProps

在 webpack 2 中怎么样?

我正在尝试使用如下所示的组件重现相同的内容:

export class Button extends React.Component {
  static propTypes = {
    data: PropTypes.object.isRequired,
    onSubmitFormLogin: PropTypes.func.isRequired,
    changeForm: PropTypes.func.isRequired,
    requestError: PropTypes.func.isRequired,
  };

  static defaultProps = {
    data: {}
  };
...
}

为了使其工作,您需要使用static 关键字

根据babel,它应该是完全相同的东西但由于某种原因我无法阅读propTypes,但只能阅读defaultProps,那么他们去哪里了?

是 Webpack/Babel 删除了它们吗?

有没有人使用这种语法成功读取propTypes

注意:我无法重现该问题,因为我没有找到任何允许 static 关键字的 webpackbin 等效项

【问题讨论】:

  • 它适用于类属性 (static)。使用您发布的Button 和webpackbin 的getInfo,调用getInfo(Button) 可以正确显示它们。
  • 是的,这就是我要说的,它在这种环境下工作得很好。我在问为什么它在另一个环境中不能正常工作。
  • 您说具有类属性的那个不适用于 webpack 2,但它可以。如果您可以阅读其中一个但不能阅读另一个,则您的代码中可能有错字。您发布的按钮效果很好。
  • @MichaelJungo 这就是问题所在,我的代码没有错误,我的同事同意我们需要询问某人。尝试克隆此存储库。直接安装github.com/react-boilerplate/react-boilerplate自己试试吧,这差不多就是我的配置了,没有理由你能我不能。

标签: javascript reactjs webpack babeljs jsx


【解决方案1】:

使用您链接的存储库,完全可以访问propTypes。那么可能出了什么问题呢?

几乎有两种可能性。第一个是 component.propTypes 未定义。使用样板文件,在构建生产应用程序时就是这种情况 (npm run build)。它使用babel-plugin-transform-react-remove-prop-types(如package.json 所示),去除了道具类型。由于它不会在开发过程中发生,因此这不太可能是经历过的行为。

第二种可能是出错了。值得仔细阅读错误:

Uncaught ReferenceError: PropTypes is not defined

它说PropTypes 没有定义,所以这不可能是component.propTypes 或类属性声明。 PropTypes在哪里使用?

static propTypes = {
  data: PropTypes.object.isRequired,
  //      ^ here
  onSubmitFormLogin: PropTypes.func.isRequired,
  //                   ^ here
  changeForm: PropTypes.func.isRequired,
  //            ^ here
  requestError: PropTypes.func.isRequired,
  //              ^ and here
};

显然这意味着您没有导入PropTypes。要修复它,请导入它:

import React, { PropTypes } from 'react';

您也可以使用React.PropTypes,而无需更改导入。

【讨论】:

  • 这是因为删除了 propTypes 插件。因此,如果我想阅读 propTypes,我需要一个禁用插件的构建,有没有办法只为单个构建禁用它?
  • 不,但这就是构建目标的用途。仅在生产中包含插件。
  • 嗯,这是一个用于生产的分发版本module。如果我想从文档应用程序中读取它,我需要将它与它的道具一起分发。我想知道插件对于优化是否非常重要,我猜 propTypes 每个组件只有 20 到 40 个八位字节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 2016-10-17
  • 2021-04-11
  • 2023-03-21
  • 2017-11-28
  • 2022-07-18
  • 2018-07-10
相关资源
最近更新 更多