Was ist der Unterschied zwischen PropTypes.objectOf
und PropTypes.shape
? In den Dokumenten :
// An object with property values of a certain type
optionalObjectOf: PropTypes.objectOf(PropTypes.number)
vs.
// An object taking on a particular shape
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
})
Wann soll ich verwenden objectOf
und wann soll ich verwenden shape
?
reactjs
react-proptypes
DMac der Zerstörer
quelle
quelle
PropTypes.objectOf
?PropTypes.objectOf
zur Validierung verwenden.objectOf
ist für ein Wörterbuchobjekt mit dem gleichen Typ für alle Werte.Ich wollte nur ein Beispiel für das folgende Objekt geben:
{ petStore: { animals: { '23': { name: 'Snuffles', type: 'dog', age 13 } '29': { name: 'Mittens', type: 'cat', age: 7 } } } }
Objekt und Form
Wird verwendet, wenn ein Objekt unterschiedliche Eigenschaftsnamen haben kann, aber für jeden eine konsistente Reihe von Eigenschaften:
const animalItemShape = { name: PropTypes.string, type: PropTypes.string, age: PropTypes.number } const petStoreShape = { animals: PropTypes.objectOf(PropTypes.shape(animalItemShape)) }
Wie Sie sehen können,
animals
besteht ein Objekt aus mehreren Eigenschaften, die jeweils demanimalItemShape
Typ entsprechen.Ich hoffe es hilft!
quelle
PropTypes.objectOf(PropTypes.shape({...}))
und es hat nicht funktioniert - ich habe eine falsche Warnung erhalten, dass ich "ein Objekt übergeben habe, aber eine Zeichenfolge erwartet habe", als ich eine Zeichenfolge übergeben habe. Die Dokumente sagen, dassobjectOf
für "Ein Objekt mit Eigenschaftswerten eines bestimmten Typs" wiePropTypes.number
. Ich denke du brauchst nurPropTypes.shape({...})
ohne dasobjectOf
, was bei mir funktioniert hat.PropTypes.string
Typ festgelegt haben. Wie sah Ihr Objekt aus?PropTypes.objectOf(PropTypes.shape({...}))
wird der falsche rote Fehler "Ungültige Requisite ..."PropTypes.shape({...})
angezeigt , während er einwandfrei funktioniert (es wird kein Fehler angezeigt). Wieder sagen die Dokumente, dassobjectOf
dies wiePropTypes.objectOf(PropTypes.number)
"Ein Objekt mit Eigenschaftswerten eines bestimmten Typs" verwendet werden sollte. Es scheint mir, dass das UmwickelnPropTypes.shape({...})
mitobjectOf
nicht erforderlich ist - einfachPropTypes.shape({...})
direkt verwenden.