Динамическое имя тега в jsx и React
Я пытаюсь написать компонент React. для тегов заголовков html (h1,h2,h3 и т. д...), где приоритет заголовка динамически изменяется на основе приоритета, определенного в реквизите.
вот что я пытаюсь сделать.
<h{this.props.priority}>Hello</h{this.props.priority}>
ожидаемый результат:
<h1>Hello</h1>
это не работает. Есть ли способ сделать это?
4 ответов
нет способа сделать это на месте, просто поместите его в переменную (с заглавной буквой):
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'
)
С docs:
создайте и верните новый элемент React данного типа. Аргумент type может быть либо строкой имени тега (например,
'div'
или'span'
), или a Тип компонента React (класс или функция).код, написанный с помощью JSX, будет преобразован в use
React.createElement()
. Обычно вы не вызываетеReact.createElement()
напрямую, если вы используете JSX. См.реагировать без JSX чтобы узнать больше.
в случае динамических заголовков (h1, h2...) компонент может вернуться React.createElement
(указанный выше Феликс) вот так.
const Heading = ({level, children, ...props}) => {
return React.createElement(`h${level}`, props , children)
}
для composability, и упорки и дети переданы.
вы можете добавить что-то вроде этого:
render(){
let yourDynamicTag = $yourTag
return (
<div>
{yourDynamicTag}
</div>
)
}