【问题标题】:How to validate props with propTypes having defaultProps?如何使用具有 defaultProps 的 propTypes 验证道具?
【发布时间】:2019-09-02 21:49:47
【问题描述】:

早些时候,当我们不使用 defaultProps 时,我们使用在 这个道具没有通过的控制台。但是配置后 使用 defaultProps 的 props 签名我们不会收到任何错误。那么,如何配置两者以按预期工作?

/* Default Props */
MyApp.defaultProps = {
  data: {
    totalCount: 123
  },
  name: 'john doe'
};

/* Proptypes */
MyApp.proptypes = {
  data: {
    totalCount: Proptypes.number.isRequired
  },
  name: Proptypes.string.isRequired
};

【问题讨论】:

  • 您拥有.isRequired,因此您需要提供价值道具,并且您正在通过defaultProps 执行此操作(但也正因为如此,无论如何都不应该要求它:))

标签: javascript reactjs jsx react-props react-proptypes


【解决方案1】:
import PropTypes from 'prop-types';

你必须使用

class test { 
    static propTypes = { 
        optionalBool: PropTypes.bool,
        requiredProperty: PropTypes.number.isRequired
}}

【讨论】:

  • 感谢您的回答,能否详细说明一下?
  • 具体要解释什么?
  • 你能更新我的问题查询如何使用这个static propTypes吗?
  • Michael 这在我所指的上下文中不起作用或不起作用。所有这些都是反应组件而不是基本类,你展示的方式与我想要做的没有什么不同:)
【解决方案2】:

你已经做对了,你之前遇到的问题是,当组件初始化时,它的 props 有空值,所以你会收到运行时警告,期望一些空值 props,默认 props 甚至设置该值初始组件安装。 :)

【讨论】:

  • 它的 undefined 不是 null
  • 但你确实通过了这两个道具,对吗?如果你不这样做,那是另一个问题,你需要删除这些。您将这些道具定义为必需的,因此需要使用默认道具来修复错误,如果您不需要默认道具并且这些道具可以为空,那么您需要删除 .isRequired()
  • 我不是 OP。我只是想指出未传递道具的默认值是undefined 而不是null
  • 看看让默认道具设置但我需要处理警告,有没有可能同时处理?
猜你喜欢
  • 2018-08-01
  • 2020-10-29
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 2019-03-05
相关资源
最近更新 更多