Toutes les autres réponses fonctionnent bien, mais j'ajouterais un peu plus, car en faisant ceci:
- C'est un peu plus sûr. Même si votre vérification de type échoue, vous renvoyez toujours un composant approprié.
- C'est plus déclaratif. N'importe qui en regardant ce composant peut voir ce qu'il pourrait retourner.
- C'est plus flexible par exemple au lieu de 'h1', 'h2', ... pour le type de votre titre, vous pouvez avoir d'autres concepts abstraits 'sm', 'lg' ou 'primary', 'secondary'
Le composant Titre:
import React from 'react';
const elements = {
h1: 'h1',
h2: 'h2',
h3: 'h3',
h4: 'h4',
h5: 'h5',
h6: 'h6',
};
function Heading({ type, children, ...props }) {
return React.createElement(
elements[type] || elements.h1,
props,
children
);
}
Heading.defaultProps = {
type: 'h1',
};
export default Heading;
Que vous pouvez l'utiliser comme
<Heading type="h1">Some Heading</Heading>
ou vous pouvez avoir un concept abstrait différent, par exemple, vous pouvez définir une taille d'accessoires comme:
import React from 'react';
const elements = {
xl: 'h1',
lg: 'h2',
rg: 'h3',
sm: 'h4',
xs: 'h5',
xxs: 'h6',
};
function Heading({ size, children }) {
return React.createElement(
elements[size] || elements.rg,
props,
children
);
}
Heading.defaultProps = {
size: 'rg',
};
export default Heading;
Que vous pouvez l'utiliser comme
<Heading size="sm">Some Heading</Heading>