He creado dos modelos Estado y Ciudad en archivos separados. Ciudad Importadora en el Estado.
El estado puede tener una variedad de ciudades dentro de él.
El siguiente código funciona bien.
Estado.js
let State = PropTypes.shape({ name: React.PropTypes.string, cities: PropTypes.arrayOf(PropTypes.shape(City)) });ciudad.js
let City = PropTypes.shape({ name: React.PropTypes.string, population: PropTypes.number }); Sin embargo, cuando reescribo las cities como
let State = PropTypes.shape({ name: React.PropTypes.string, cities: PropTypes.arrayOf(City) });me da aviso.
Resumen :
cities: PropTypes.arrayOf(PropTypes.shape(City)) funciona.
cities: PropTypes.arrayOf(City) no.
Me da la siguiente advertencia:
Warning: Failed propType: Property xx of component Xx has invalid PropType notation inside arrayOf. Check the render method of Yy.
Mi pregunta es, City es Proptypes.shape , entonces, ¿por qué necesito mencionar Proptypes.shape(City) nuevamente en Proptypes.arrayOf ?
En tu código:
let City = PropTypes.shape({ name: React.PropTypes.string, population: PropTypes.number });¿Qué versión de React estás usando? Estás haciendo referencia a PropTypes de React.PropTypes y PropTypes. ¿Cómo estás importando PropTypes? ¿Está utilizando el paquete prop-types?
Estoy usando un escenario similar y funciona para mí. ¿Cómo se ve tu renderizado y cuáles son los datos proporcionados para el accesorio?
Para mí, lo siguiente funciona absolutamente:
cities: PropTypes.arrayOf(City)Tengo el mismo problema y, en mi caso, se debió a que un archivo se cargó antes que el otro.
En su caso, podría deberse a que City.js aún no está cargado cuando carga State.js
Puedo compartir cuál fue el problema en mi caso. Este fue el código que causó el error:
const answerPropType = PropTypes.shape({ author: PropTypes.string.isRequired, text: PropTypes.string.isRequired, followUps: PropTypes.arrayOf(followUpPropType) }) const followUpPropType = PropTypes.shape({ author: PropTypes.string.isRequired, text: PropTypes.string.isRequired }) El problema es que se declaró followUpPropType después de answerPropType . Así que simplemente invertí su orden:
const followUpPropType = PropTypes.shape({ author: PropTypes.string.isRequired, text: PropTypes.string.isRequired }) const answerPropType = PropTypes.shape({ author: PropTypes.string.isRequired, text: PropTypes.string.isRequired, followUps: PropTypes.arrayOf(followUpPropType) })