web-dev-qa-db-fra.com

React propTypes: objectOf vs shape?

Quelle est la différence entre PropTypes.objectOf et PropTypes.shape? Dans le docs :

// An object with property values of a certain type
optionalObjectOf: PropTypes.objectOf(PropTypes.number)

contre

// An object taking on a particular shape
optionalObjectWithShape: PropTypes.shape({
  color: PropTypes.string,
  fontSize: PropTypes.number
})

Quand dois-je utiliser objectOf et quand dois-je utiliser shape?

53
DMac the Destroyer

PropTypes.objectOf est utilisé pour décrire un objet dont les propriétés sont du même type.

const objectOfProp = {
  latitude: 37.331706,
  longitude: -122.030783
}

// PropTypes.objectOf(PropTypes.number)

PropTypes.shape est utilisé pour décrire un objet dont les clés sont connues à l'avance et peut représenter différents types.

const shapeProp = {
  name: 'Jane',
  age: 25
}

// PropTypes.shape({ name: PropTypes.string, age: PropTypes.number })
94
djfdev

Je voulais juste donner un exemple à partir de l'objet suivant:

{
    petStore: {
        animals: {
           '23': { name: 'Snuffles', type: 'dog', age 13 }
           '29': { name: 'Mittens', type: 'cat', age: 7 }
        }
    }
}

ObjectOf et Shape

Utilisé lorsqu'un objet peut avoir des noms de propriété différents, mais un ensemble cohérent de propriétés pour chacune d'elles:

const animalItemShape = {
    name: PropTypes.string,
    type: PropTypes.string,
    age: PropTypes.number
}

const petStoreShape = {
    animals: PropTypes.objectOf(PropTypes.shape(animalItemShape))
}

Comme vous pouvez le constater, animals est un objet composé de plusieurs propriétés conformes au type animalItemShape.

J'espère que ça aide!

32
Levi Fuller