J'ai un composant qui a une propriété obligatoire et une propriété facultative. La propriété optionnelle agit comme un mécanisme de substitution qui, s'il n'est pas présent, prend par défaut une valeur dérivée de la propriété requise. Il est mis en place comme ceci:Application de la logique à defaultProps
function fruitColour(fruit) {
switch (fruit) {
case 'banana':
return 'yellow';
}
}
const Fruit = (props) => {
const { type } = props;
let { colour } = props;
colour = colour || fruitColour(type);
return <p>A yummy {colour} {type}!</p>
}
Cela me permet d'avoir une banane mûre, mûre:
<Fruit type='banana' />
Ou un plus jeune, banane verte:
<Fruit type='banana' colour='green' />
Le projet que je suis travaille sur le fait que si une valeur prop
n'est pas lue comme une constante, elle doit avoir une valeur par défaut comprise entre defaultProps
. Actuellement je fais ceci:
Fruit.defaultProps = {
colour: ''
}
Mais c'est stupide parce que la logique de mon composant manipule déjà l'état par défaut.
Suis-je coincé avec ce modèle, ou est-il possible de lire la propriété type
au sein defaultProps
afin de faire quelque chose comme ceci:
Fruit.defaultProps = {
colour: (props) => fruitColour(props.type)
}
... puis lire la propriété colour
comme constante Eh bien, abandonner la logique par défaut?
Pourquoi ne pas faire simplement 'const color = props.colour || fruitColour (type) ' – taylorc93
vérifiez ceci: [this.props dans getDefaultProps() de React?] (https://stackoverflow.com/questions/33125985/this-props-inside-getdefaultprops-of-react) –
À mon avis , defaultProps est plus pour la sécurité que pour la vraie logique d'application. Cela devrait garantir que si les gens oublient les accessoires, le composant ne tombera pas en panne. La sélection d'une valeur de repli est de la responsabilité de render. Je vais parfaitement bien avec votre solution actuelle. L'utilisation de la logique dépendante des accessoires dans defaultProps pourrait avoir un comportement étrange. Et si vous changez de 'banane' en 'pomme'? Je suis sûr qu'il utilisera les accessoires par défaut et vous aurez une pomme jaune. – Okazari