web-dev-qa-db-fra.com

Passer Proptypes.shape à Proptypes.arrayOf en réaction

J'ai créé deux modèles State et City dans des fichiers séparés. Ville importatrice dans l'État. 

État peut avoir un tableau de villes à l'intérieur.

Le code ci-dessous fonctionne bien.

State.js

let State = PropTypes.shape({
    name: React.PropTypes.string,
    cities: PropTypes.arrayOf(PropTypes.shape(City))
}); 

City.js

let City = PropTypes.shape({
    name: React.PropTypes.string,
    population: PropTypes.number
}); 

Cependant, quand je réécris la cities comme

let State = PropTypes.shape({
    name: React.PropTypes.string,
    cities: PropTypes.arrayOf(City)
}); 

cela me donne un avertissement.

Résumé :

cities: PropTypes.arrayOf(PropTypes.shape(City)) fonctionne.

cities: PropTypes.arrayOf(City) not.

Cela me donne l'avertissement suivant:

Warning: Failed propType: Property xx of component Xx has invalid PropType notation inside arrayOf. Check the render method of Yy.

Ma question est, City est un Proptypes.shape, alors pourquoi dois-je mentionner Proptypes.shape(City) dans Proptypes.arrayOf?

12
Ankit

Dans votre code: 

let City = PropTypes.shape({
  name: React.PropTypes.string,
  population: PropTypes.number
}); 

Quelle version de React utilisez-vous? Vous faites référence à PropTypes de React.PropTypes et PropTypes. Comment importez-vous les PropTypes? Utilisez-vous le paquet prop-types? 

J'utilise un scénario similaire et cela fonctionne pour moi. À quoi ressemble votre rendu et quelles sont les données fournies pour l'accessoire?

Pour moi, ce qui suit fonctionne absolument:

cities: PropTypes.arrayOf(City)
4
Ken Gregory

J'ai le même problème, et dans mon cas, c'est parce qu'un fichier a été chargé avant l'autre. 

Dans votre cas, cela pourrait être parce que City.js n'est pas encore chargé lorsque vous chargez State.js

0
Sven G