javascript #reactjs
#javascript #reactjs
Вопрос:
У меня есть компонент, в котором мне нужно передать HTML-элемент в качестве реквизита другому элементу
const MyText = () => {
return (
<>
<h1>Sample heading</h1>
</>
)
}
return (
<div>
<MyComponent Text={MyText} onClose={() => setShow(false)} show={show} />
</div>
);
MyComponent.js
export default function MyComponent(props) {
return (
<>
{props.Text}
</>
);
}
Проблема: я ничего не получаю на экране. Я что-то здесь упускаю?
Комментарии:
1. Вам нужно передать so
MyText
как компонент, а не функцию ->Text={<MyText/>}
. См. Раздел Композиция против наследования2. Это также звучит немного излишне сложно. Компоненты должны (в идеале) быть как можно более тупыми. Разве вы не можете просто передать текст и позволить компоненту отображать его внутри заголовка?
3. @Andy Я бы согласился с вами, если бы так выглядел его производственный код, но, похоже, это упрощенный код для демонстрационных целей, и заголовок правильно приведен только в качестве примера.
4. Я бы спросил «почему», даже если это не производственный код. @MatthewKwong. Или, возможно, «в чем проблема, которую пытается решить OP?».
5. @Andy Ну, «проблема» буквально в самом вопросе. Он хочет передать компонент / HTML-элемент другому компоненту через props и отобразить его.
Ответ №1:
Есть два способа.
Вариант 1: передача типа компонента (или класса, если вы исходите из фона ООП)
const MyText = () => {
return (
<>
<h1>Sample heading</h1>
</>
)
}
return (
<div>
<MyComponent Text={MyText} onClose={() => setShow(false)} show={show} />
</div>
);
const MyComponent = ({ Text }) => {
return (
<>
<Text />
</>
);
}
Вариант 2: передача компонента (или экземпляра, если вы исходите из фона ООП)
const MyText = () => {
return (
<>
<h1>Sample heading</h1>
</>
)
}
return (
<div>
<MyComponent text={<MyText />} onClose={() => setShow(false)} show={show} />
</div>
);
const MyComponent = ({ text }) => {
return (
<>
{text}
</>
);
}