358 votes

PropTypes React : Autoriser différents types de PropTypes pour un même objet

J'ai un composant qui reçoit un accessoire pour sa taille. Le paramètre peut être une chaîne de caractères ou un nombre, par exemple : "LARGE" o 17 .

Puis-je laisser React.PropTypes sait qu'il peut s'agir de l'un ou l'autre dans la validation des propTypes ?

Si je ne spécifie pas le type, j'obtiens un avertissement :

type d'hélice size n'est pas valide ; il doit s'agir d'une fonction, généralement issue de la technologie React.PropTypes.

MyComponent.propTypes = {
    size: React.PropTypes
}

811voto

Paweł Andruszków Points 3931
size: PropTypes.oneOfType([
  PropTypes.string,
  PropTypes.number
]),

En savoir plus : Vérification des types avec PropTypes

0 votes

Merci pour cet article, j'obtiens des erreurs aléatoires lorsque je lance mes tests Jest en définissant des Proptypes statiques dans mes classes : ReferenceError: oneOfType is not defined - Des suggestions ? Merci d'avance !

0 votes

Êtes-vous sûr d'avoir correctement importé import PropTypes from 'prop-types'; ?

0 votes

Bonjour Pawel - oui, c'est ainsi que nous les importons : import PropTypes from 'prop-types';

41voto

cleong Points 1822

À des fins de documentation, il est préférable d'énumérer les valeurs de chaîne qui sont légales :

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

0 votes

C'est ainsi qu'il faut procéder lorsque la propriété doit être une Enum. Vous pouvez même fournir un Enum à la fonction oneOf méthode.

0 votes

Comment l'afficher dans les suggestions lorsque l'option de taille comme vous appuyez sur ctrl+espace et la suggestion vient ceux qui veulent définir alors

23voto

CorrinaB Points 61

Cela pourrait vous convenir :

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

3 votes

Bien que ce code puisse répondre à la question, le fait de fournir un contexte supplémentaire concernant le pourquoi et/ou le comment de cette réponse améliore sa valeur à long terme.

6voto

Sourav Singh Points 540

Voici un exemple pro de l'utilisation de proptypes multiples et de proptypes simples.

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;

-7voto

Michael Points 35
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

18 votes

Oui, les PropTypes vivent maintenant dans leur propre paquet, mais cela ne répond pas à la question...

1 votes

Totalement hors sujet

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X