Я пытаюсь написать компонент React. для тегов заголовков html (h1, h2, h3 и т. д.), где приоритет заголовка динамически изменяется в зависимости от приоритета, который мы определили в подпорках.
Вот что я пытаюсь сделать.
<h{this.props.priority}>Hello</h{this.props.priority}>
ожидаемый результат:
<h1>Hello</h1>
Это не работает. Есть ли какой-нибудь возможный способ сделать это?
Ответы:
Нет способа сделать это на месте, просто поместите его в переменную ( с заглавной буквой ):
источник
React.createClass
я предпочитаю. Спасибо.<CustomTag foo="bar">
var foo = { bar: CustomTag }; return <foo.bar />
работает отлично.Для полноты, если вы хотите использовать динамическое имя, вы также можете напрямую вызвать
React.createElement
вместо использования JSX:Это избавляет от необходимости создавать новую переменную или компонент.
С реквизитом:
Из документов :
источник
Если вы используете TypeScript, вы увидите такую ошибку:
TypeScript не знает, что
CustomTag
является допустимым именем тега HTML, и выдает бесполезную ошибку.Чтобы исправить, бросьте
CustomTag
какkeyof JSX.IntrinsicElements
!источник
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'.
Все остальные ответы работают нормально, но я бы добавил несколько дополнительных, потому что, делая это:
Заголовок компонента:
Который вы можете использовать как
или вы можете иметь другую абстрактную концепцию, например, вы можете определить размер реквизита как:
Который вы можете использовать как
источник
В случае динамических заголовков (h1, h2 ...) компонент может возвращаться
React.createElement
(упомянутый выше Феликсом ) следующим образом.Для компоновки пропускаются как реквизиты, так и дети.
См пример
источник