React: React.PropTypes.node doit accepter un composant sans état (fonction)

Créé le 22 nov. 2015  ·  3Commentaires  ·  Source: facebook/react

Je viens de remplacer certains composants de réaction définis à l'aide de classes es6 et je reçois maintenant des avertissements indiquant que mon composant sans état de réaction (qui ne fonctionne que) n'est pas un ReactNode.

Warning: Failed propType: Invalid prop `Loader` supplied to `Picture`, expected a ReactNode.

Je validais certains composants en utilisant React.PropTypes.node , mais maintenant j'ai besoin d'utiliser PropTypes.oneOfType([ PropTypes.node, PropTypes.func ]) ce qui semble un peu long pour dire "cela peut être tout ce qui peut être rendu en tant que composant" (ce qui est ce que ProTypes.node est censé couvrir, non ?).

De la doc

    // Anything that can be rendered: numbers, strings, elements or an array
    // (or fragment) containing these types.
    optionalNode: React.PropTypes.node,

Peut-être que func devrait être ajouté ? Ou y a-t-il une raison pour laquelle node ne gère pas aussi func ?

Commentaire le plus utile

Pouvez-vous montrer comment vous l'utilisiez ? Je ne pense pas non plus que les classes de composants auraient dû être valides pour node . node est censé accepter tout ce qui peut être rendu. Les classes ne peuvent pas être rendues directement - vous passeriez un élément avec le type défini.

Tous les 3 commentaires

Qu'en est-il de l'ajout d'un nouveau validateur propType ? Quelque chose comme

propTypes: {
    optionalComponent: React.PropTypes.component
}

où le composant aurait la forme de

PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])

ou quelque chose de similaire. À mon avis, il est assez dangereux de laisser passer les gens dans les fonctions, mais je ne sais pas comment faire une meilleure validation. Lire function.toString semble être un hack gigantesque qui ne fonctionnerait pas après minification, mais c'est la seule option que je connaisse.

Pouvez-vous montrer comment vous l'utilisiez ? Je ne pense pas non plus que les classes de composants auraient dû être valides pour node . node est censé accepter tout ce qui peut être rendu. Les classes ne peuvent pas être rendues directement - vous passeriez un élément avec le type défini.

Oh mon Dieu. Tu as tellement raison. Je me sens stupide. Je suppose que je validais quelque chose dans le mauvais sens. Désolé pour le bruit.

Cette page vous a été utile?
0 / 5 - 0 notes