Acabo de reemplazar algunos componentes de reacción que se definieron usando clases es6 y ahora recibo advertencias sobre mi componente de reacción sin estado (que son solo funciones) que no es un ReactNode.
Warning: Failed propType: Invalid prop `Loader` supplied to `Picture`, expected a ReactNode.
Estaba validando algunos componentes usando React.PropTypes.node
, pero ahora necesito usar PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])
que parece un poco largo para decir "esto puede ser cualquier cosa que se pueda representar como un componente" (que es lo que ProTypes.node
Se supone que
del documento
// Anything that can be rendered: numbers, strings, elements or an array
// (or fragment) containing these types.
optionalNode: React.PropTypes.node,
¿Tal vez se deberían agregar func
? ¿O hay alguna razón por la cual node
no maneja func
también?
¿Qué hay de agregar un nuevo validador propType? Algo como
propTypes: {
optionalComponent: React.PropTypes.component
}
donde el componente tendría forma de
PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])
o algo similar. En mi opinión, es bastante peligroso dejar que las personas pasen funciones, pero no estoy seguro de cómo hacer una mejor validación. Leer function.toString
parece un truco gigantesco que no funcionaría después de la minificación, pero esta es la única opción que conozco.
¿Puedes mostrar cómo estabas usando esto? No creo que las clases de componentes deban haber sido válidas para node
tampoco. Se supone que node
acepta cualquier cosa que se pueda representar. Las clases no se pueden representar directamente: pasaría un elemento con el conjunto de tipos.
Ay Dios mío. Tienes mucha razon. Me siento estupido. Supongo que estaba validando algo de mala manera. Lo siento por el ruido.
Comentario más útil
¿Puedes mostrar cómo estabas usando esto? No creo que las clases de componentes deban haber sido válidas para
node
tampoco. Se supone quenode
acepta cualquier cosa que se pueda representar. Las clases no se pueden representar directamente: pasaría un elemento con el conjunto de tipos.