Intento escribir un componente Reaccionar. para etiquetas de encabezado html (h1, h2, h3, etc.), donde la prioridad del encabezado cambia dinámicamente en función de la prioridad que hemos definido en los accesorios.
Aquí lo que intento hacer.
<h{this.props.priority}>Hello</h{this.props.priority}>
Rendimiento esperado:
<h1>Hello</h1>
Esto no está funcionando. ¿Hay algún método posible para hacer esto?
Respuestas:
No hay forma de hacer eso en el lugar, simplemente póngalo en una variable ( con la primera letra en mayúscula ):
fuente
React.createClass
, prefiero de esta manera. Gracias.<CustomTag foo="bar">
var foo = { bar: CustomTag }; return <foo.bar />
funciona bien.Para completar, si desea usar un nombre dinámico, también puede llamar directamente en
React.createElement
lugar de usar JSX:Esto evita tener que crear una nueva variable o componente.
Con accesorios:
De los documentos :
fuente
Si está utilizando TypeScript, habrá visto un error como este:
TypeScript no sabe que
CustomTag
es un nombre de etiqueta HTML válido y arroja un error inútil.¡Para arreglar, lanzar
CustomTag
comokeyof JSX.IntrinsicElements
!fuente
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'.
Todas las otras respuestas están funcionando bien, pero agregaría un poco más, porque al hacer esto:
El componente de encabezado:
Que puedes usar como
o puede tener un concepto abstracto diferente, por ejemplo, puede definir accesorios de tamaño como:
Que puedes usar como
fuente
En el caso de los encabezados dinámicos (h1, h2 ...) , un componente podría regresar
React.createElement
(mencionado anteriormente por Felix ) así.Para la compostibilidad, se pasan los accesorios y los niños.
Ver ejemplo
fuente