J'essaye d'écrire un composant React. pour les balises d'en-tête html (h1, h2, h3, etc ...), où la priorité de l'en-tête change dynamiquement en fonction de la priorité que nous avons définie dans les accessoires.
Voici ce que j'essaye de faire.
<h{this.props.priority}>Hello</h{this.props.priority}>
production attendue:
<h1>Hello</h1>
Cela ne fonctionne pas. Existe-t-il une méthode possible pour le faire?
Réponses:
Pas moyen de le faire sur place, il suffit de le mettre dans une variable ( avec la première lettre en majuscule ):
la source
React.createClass
, je préfère cette façon. Merci.<CustomTag foo="bar">
var foo = { bar: CustomTag }; return <foo.bar />
fonctionne très bien.Par souci d'exhaustivité, si vous souhaitez utiliser un nom dynamique, vous pouvez également appeler directement
React.createElement
au lieu d'utiliser JSX:Cela évite d'avoir à créer une nouvelle variable ou un nouveau composant.
Avec des accessoires:
À partir de la documentation :
la source
Si vous utilisez TypeScript, vous aurez vu une erreur comme celle-ci:
TypeScript ne sait pas que
CustomTag
s'agit d'un nom de balise HTML valide et génère une erreur inutile.Pour réparer, cast
CustomTag
commekeyof JSX.IntrinsicElements
!la source
Types of property 'crossOrigin' are incompatible. Type 'string | undefined' is not assignable to type '"" | "anonymous" | "use-credentials" | undefined'. Type 'string' is not assignable to type '"" | "anonymous" | "use-credentials" | undefined'.
Toutes les autres réponses fonctionnent bien, mais j'ajouterais un peu plus, car en faisant ceci:
Le composant Titre:
Que vous pouvez l'utiliser comme
ou vous pouvez avoir un concept abstrait différent, par exemple, vous pouvez définir une taille d'accessoires comme:
Que vous pouvez l'utiliser comme
la source
Dans le cas des en-têtes dynamiques (h1, h2 ...) , un composant pourrait retourner
React.createElement
(mentionné ci-dessus par Félix ) comme ça.Pour la composabilité, les accessoires et les enfants sont passés.
Voir l'exemple
la source