将 JSX 元素声明为子元素

  • 本文关键字:元素 声明 JSX reactjs
  • 更新时间 :
  • 英文 :


我有一个名为"TextRender"的React组件,它正在渲染一些文本:

render() {
return (
<div>
<Text>
{this.props.sometext}
</Text>
</div>
)

现在,我想使此组件呈现一个作为子元素传递的附加 JSX 元素。像这样:

render() {
return (
<div>
<Text>
{this.props.sometext}
</Text>
</div>
<Text>
{this.props.additionalJsxElement}
</Text>
)

额外的 JSX 元素将在另一个名为 "Test" 的组件中声明:

const additionalElement = () => {
return (
<div>I am the child!</div>
)
}

。并在上面的组件中使用:

return (
<div>
<TextRender additionalJsxElement={additionalElement()}></TextRender>
</div>
)

这样的事情可能吗?因为上面的实现抛出以下错误:

Uncaught TypeError: Converting circular structure to JSON

如何使 TextRender 组件成为像这样的高阶组件,

render() {
return (
<div>
<Text>
{this.props.sometext}
</Text>
<Text>
{props.children}
</Text>
</div>
)

然后像这样使用组件(将子组件注入为子组件(,

return (
<div>
<TextRender>{additionalElement()}</TextRender>
</div>
)

是的,可以这样做

// Create the component as a function
const additionalElement =  ()=><div>I am the child!</div>;
return (
<div>
// pass function as a child
<TextRender additionalJsxElement={additionalElement}></TextRender>
</div>
)

在文本呈现组件中

render() {
const {additionalJsxElement, sometext } = this.props;
return (
<div>
<Text>
{sometext}
</Text>
</div>
<Text>
// the component should be made as follows.
<additionalJsxElement/>
</Text>
)

我想说最惯用的事情可能是:

const TextRenderer = ({ someText }) => (
<>
<div>
<Text>
{ someText }
</Text>
</div>
{ children }
</>
)

然后,您可以将其用作:

<TextRender someText="Yoda" />
// OR
<TextRender someText="Yoda">
Luke Skywalker
</TextRender>
// OR
<TextRender someText="Yoda">
<div>
Wrapped stuff
</div>
</TextRender>

最新更新