Étant donné un composant simple qui rend ses enfants:
class ContainerComponent extends Component {
static propTypes = {
children: PropTypes.object.isRequired,
}
render() {
return (
<div>
{this.props.children}
</div>
);
}
}
export default ContainerComponent;
Question: Quel doit être le propType de l'hélice pour enfants?
Lorsque je le définis en tant qu'objet, il échoue lorsque j'utilise le composant avec plusieurs enfants:
<ContainerComponent>
<div>1</div>
<div>2</div>
</ContainerComponent>
Avertissement: Type d'hélice échoué: hélice non valide
children
du typearray
fourni àContainerComponent
, attendueobject
.
Si je le définis comme un tableau, il échouera si je ne lui donne qu'un seul enfant, c'est-à-dire:
<ContainerComponent>
<div>1</div>
</ContainerComponent>
Avertissement: type d'accessoire ayant échoué: enfants d'accessoires non valides de l'objet type fourni à ContainerComponent, tableau attendu.
S'il vous plaît, conseillez-vous, ne devrais-je simplement pas prendre la peine de vérifier les éléments pour les enfants?
reactjs
jsx
react-proptypes
d3ming
la source
la source
node
Réponses:
Essayez quelque chose comme ça en utilisant
oneOfType
ouPropTypes.node
ou
la source
children
de typeobject
... attendait un tableau."children: PropTypes.node
celle qui a fonctionné dans les deux cas. Merci pour les suggestions =)React.PropTypes.node
décrit tout objet pouvant être rendu.PropTypes.node
. Cela gère la correction suivante: rien, chaîne, élément unique, plusieurs éléments, fragment, composant.Pour moi, cela dépend du composant. Si vous savez de quoi vous avez besoin pour être rempli, vous devez essayer de spécifier exclusivement ou plusieurs types en utilisant:
Cependant, je trouve principalement, avec des composants plus génériques qui peuvent avoir de nombreux types d'enfants, que je suis heureux d'utiliser:
Si vous voulez faire référence à un composant React, vous rechercherez
Bien que,
décrit tout ce qui peut être rendu - des chaînes, des nombres, des éléments ou un tableau de ces choses. Si cela vous convient, c'est le chemin.
la source
Proptypes.any
est un type trop courant. Eslint n'est pas satisfait de cela.La documentation PropTypes contient les éléments suivants
Ainsi, vous pouvez utiliser
PropTypes.node
pour rechercher des objets ou des tableaux d'objetsla source
Les réponses ici ne semblent pas tout à fait couvrir la vérification exacte des enfants.
node
etobject
sont trop permissifs, je voulais vérifier l'élément exact. Voici ce que j'ai fini par utiliser:oneOfType([])
pour autoriser un seul ou plusieurs enfantsshape
etarrayOf(shape({}))
pour un seul et un ensemble d'enfants, respectivementoneOf
pour l'élément enfant lui-mêmeEn fin de compte, quelque chose comme ça:
Ce problème m'a aidé à comprendre cela plus clairement: https://github.com/facebook/react/issues/2979
la source
Si vous souhaitez faire correspondre exactement un type de composant, cochez cette case
Si vous souhaitez faire correspondre exactement certains types de composants, cochez cette case
la source
Essayez un accessoire personnalisé:
Violon
Afficher l'extrait de code
la source
Exemple:
Image: vous montre une erreur dans la console si le type attendu est différent
la source