React PropTypes:允许一个prop的不同类型的PropTypes

Kev*_*off 194 reactjs react-proptypes

我有一个组件,它的大小接收道具.道具可以是字符串或数字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
}
Run Code Online (Sandbox Code Playgroud)

小智 487

size: PropTypes.oneOfType([
  PropTypes.string,
  PropTypes.number
]),
Run Code Online (Sandbox Code Playgroud)

了解更多:使用PropTypes进行Typechecking

  • @Imdad:`oneOf`不用于类型检查,仅用于限制属性的实际值。因此继续使用“PropTypes.oneOfType”。 (2认同)

cle*_*ong 17

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

size: PropTypes.oneOfType([
    PropTypes.number,
    PropTypes.oneOf([ 'SMALL', 'LARGE' ]),
]),
Run Code Online (Sandbox Code Playgroud)


小智 7

这可能对你有用:

height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可能会回答问题,但提供有关此代码为什么和/或如何回答问题的附加上下文可提高其长期价值。 (2认同)

Sou*_*ngh 6

这是使用多 proptype 和单 proptype 的专业示例。

import React, { Component } from 'react';
import { string, shape, array, oneOfType } from 'prop-types';

class MyComponent extends Component {
  /**
   * Render
   */
  render() {
    const { title, data } = this.props;

    return (
      <>
        {title}
        <br />
        {data}
      </>
    );
  }
}

/**
 * Define component props
 */
MyComponent.propTypes = {
  data: oneOfType([array, string, shape({})]),
  title: string,
};

export default MyComponent;

Run Code Online (Sandbox Code Playgroud)