Ответ 1
Нет способа сделать это на месте, просто поместите его в переменную (с заглавной первой буквой):
const CustomTag = 'h${this.props.priority}';
<CustomTag>Hello</CustomTag>
Я пытаюсь написать компонент React. для html заголовков (h1, h2, h3 и т.д.), где приоритет заголовка динамически изменяется в зависимости от приоритета, который мы определили в реквизитах.
Вот что я пытаюсь сделать.
<h{this.props.priority}>Hello</h{this.props.priority}>
ожидаемый вывод:
<h1>Hello</h1>
Это не работает. Есть ли какой-нибудь возможный способ сделать это?
Нет способа сделать это на месте, просто поместите его в переменную (с заглавной первой буквой):
const CustomTag = 'h${this.props.priority}';
<CustomTag>Hello</CustomTag>
Для полноты, если вы хотите использовать динамическое имя, вы также можете напрямую вызвать React.createElement
вместо использования JSX:
React.createElement('h${this.props.priority}', null, 'Hello')
Это избавляет от необходимости создавать новую переменную или компонент.
С реквизитом:
React.createElement(
'h${this.props.priority}',
{
foo: 'bar',
},
'Hello'
)
Из документов:
Создайте и верните новый элемент React данного типа. Аргументом типа может быть либо строка имени тега (например,
'div'
или'span'
), либо тип компонента React (класс или функция).Код, написанный с использованием JSX, будет преобразован для использования
React.createElement()
. Обычно вы не будете вызыватьReact.createElement()
напрямую, если вы используете JSX. Смотрите React Without JSX, чтобы узнать больше.
В случае динамических заголовков (h1, h2...) компонент может вернуть React.createElement
(упомянутый выше Феликсом), как это происходит.
const Heading = ({level, children, ...props}) => {
return React.createElement('h${level}', props , children)
}
Для компоновки пропускаются как реквизиты, так и дети.