Próbuję napisać komponent React. dla tagów nagłówków html (h1, h2, h3, itd.), gdzie priorytet nagłówka zmienia się dynamicznie w zależności od priorytetu, który zdefiniowaliśmy we właściwościach.
Oto co próbuję zrobić.
<h{this.props.priority}>Hello</h{this.props.priority}>
oczekiwany wynik:
<h1>Hello</h1>
To nie działa. Czy jest na to jakikolwiek sposób?
Odpowiedzi:
Nie ma sposobu, aby to zrobić na miejscu, po prostu umieść go w zmiennej ( z wielką literą ):
źródło
React.createClass
, wolę ten sposób. Dzięki.<CustomTag foo="bar">
var foo = { bar: CustomTag }; return <foo.bar />
działa w porządku.Dla kompletności, jeśli chcesz użyć dynamicznej nazwy, możesz również bezpośrednio wywołać
React.createElement
zamiast używania JSX:Pozwala to uniknąć konieczności tworzenia nowej zmiennej lub komponentu.
Z rekwizytami:
Z dokumentów :
źródło
Jeśli używasz TypeScript, zobaczysz następujący błąd:
TypeScript nie wie, czy
CustomTag
jest to prawidłowa nazwa tagu HTML, i zgłasza nieprzydatny błąd.Aby naprawić, przesyłaj
CustomTag
jakokeyof JSX.IntrinsicElements
!źródło
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'.
Wszystkie inne odpowiedzi działają dobrze, ale dodałbym kilka dodatkowych, ponieważ robiąc to:
Komponent Nagłówek:
Którego możesz użyć
lub możesz mieć inną abstrakcyjną koncepcję, na przykład możesz zdefiniować rekwizyty rozmiaru, takie jak:
Którego możesz użyć
źródło
W przypadku nagłówków dynamicznych (h1, h2 ...) , komponent mógłby powrócić
React.createElement
(o czym wspomniał Felix ) w ten sposób.W przypadku możliwości komponowania przekazywane są zarówno rekwizyty, jak i elementy podrzędne.
Zobacz przykład
źródło