React PropTypes:允许一个道具使用不同类型的PropType


243

我有一个组件,可以接收其大小的道具。该prop可以是字符串,也可以是数字ex:"LARGE"17

我可以让React.PropTypes知道在propTypes验证中这可以是另一个吗?

如果未指定类型,则会收到警告: prop type `size` is invalid; it must be a function, usually from React.PropTypes.

MyComponent.propTypes = {
    size: React.PropTypes
}

Answers:


571
size: PropTypes.oneOfType([
  PropTypes.string,
  PropTypes.number
]),

了解更多:使用PropTypes进行类型检查


为此,当我在类中设置静态Proptypes的Jest测试运行时,我会遇到随机错误:ReferenceError: oneOfType is not defined—有什么建议吗?提前致谢!!
SaraInésCalderón18年

您确定您已正确导入import PropTypes from 'prop-types';吗?
帕维尔Andruszków

嘿Pawel-是的,这就是我们的进口方式:import PropTypes from 'prop-types';
SaraInésCalderón18年

1
2019-使用PropTypes.oneOf
Imdad

26

出于文档目的,最好列出合法的字符串值:

size: PropTypes.oneOfType([
    PropTypes.number,
    PropTypes.oneOf([ 'SMALL', 'LARGE' ]),
]),

11

这可能对您有用:

height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),

1
尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以提高其长期价值。
rollstuhlfahrer

-4
import React from 'react';              <--as normal
import PropTypes from 'prop-types';     <--add this as a second line

    App.propTypes = {
        monkey: PropTypes.string,           <--omit "React."
        cat: PropTypes.number.isRequired    <--omit "React."
    };

    Wrong:  React.PropTypes.string
    Right:  PropTypes.string

16
是的,PropTypes现在放在自己的程序包中,但这不能解决问题……
Kevin Amiranoff

1
完全与问题
无关
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.