Reactjs 将JSX元素声明为子元素

Reactjs 将JSX元素声明为子元素,reactjs,Reactjs,我有一个名为“TextRender”的React组件,它正在呈现一些文本: render() { return ( <div> <Text> {this.props.sometext} </Text> </div> ) 让TextRender组件成为这样的高阶组件怎么样 render() { return ( <div> <Text> {this.props.somet

我有一个名为“TextRender”的React组件,它正在呈现一些文本:

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

让TextRender组件成为这样的高阶组件怎么样

render() {
 return (
  <div>
   <Text>
      {this.props.sometext}
   </Text>
   <Text>
      {props.children}
   </Text>
  </div>
)
render(){
返回(
{this.props.sometext}
{props.children}
)
然后像这样使用组件(将子组件作为子组件注入)

返回(
{additionalElement()}
)

让TextRender组件成为这样的高阶组件怎么样

render() {
 return (
  <div>
   <Text>
      {this.props.sometext}
   </Text>
   <Text>
      {props.children}
   </Text>
  </div>
)
render(){
返回(
{this.props.sometext}
{props.children}
)
然后像这样使用组件(将子组件作为子组件注入)

返回(
{additionalElement()}
)

是的,可以这样做

// 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>
)
//将组件创建为函数
const additionalElement=()=>我就是孩子!;
返回(
//作为一个孩子传递函数
)
在TextRender组件中

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

  <Text>
   // the component should be made as follows.
   <additionalJsxElement/>
  </Text>
)
render(){
const{additionalJsxElement,sometext}=this.props;
返回(
{sometext}
//组件应按如下方式制作。
)

是的,可以这样做

// 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>
)
//将组件创建为函数
const additionalElement=()=>我就是孩子!;
返回(
//作为一个孩子传递函数
)
在TextRender组件中

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

  <Text>
   // the component should be made as follows.
   <additionalJsxElement/>
  </Text>
)
render(){
const{additionalJsxElement,sometext}=this.props;
返回(
{sometext}
//组件应按如下方式制作。
)

我想说,最惯用的做法可能是:

const TextRenderer = ({ someText }) => (
  <>
    <div>
      <Text>
        { someText }
      </Text>
    </div>
    { children }
  </>
)
constTextRenderer=({someText})=>(
{someText}
{儿童}
)
然后,您可以将其用作:

<TextRender someText="Yoda" />

// OR

<TextRender someText="Yoda">
  Luke Skywalker
</TextRender>

// OR

<TextRender someText="Yoda">
  <div>
    Wrapped stuff
  </div>
</TextRender>

//或
卢克·天行者
//或
包装材料

我想说,最惯用的做法可能是:

const TextRenderer = ({ someText }) => (
  <>
    <div>
      <Text>
        { someText }
      </Text>
    </div>
    { children }
  </>
)
constTextRenderer=({someText})=>(
{someText}
{儿童}
)
然后,您可以将其用作:

<TextRender someText="Yoda" />

// OR

<TextRender someText="Yoda">
  Luke Skywalker
</TextRender>

// OR

<TextRender someText="Yoda">
  <div>
    Wrapped stuff
  </div>
</TextRender>

//或
卢克·天行者
//或
包装材料

似乎你的代码没有什么问题,除了
内部的
可能存在的问题。那么怎么了?加森·卢海奇:我用错误消息更新了我的问题。它说:未捕获类型错误:将循环结构转换为JSONOh我明白了,你所需要做的就是
。你应该传递函数c组件本身,而不使用
()
。你的代码似乎没有什么问题,除了
内部的
可能有问题。那怎么了?加森·卢海奇:我用错误消息更新了我的问题。它说:未捕获类型错误:将循环结构转换为JSONOh我明白了,你只需要做
。你应该传递这个函数组件本身,没有使用
()
调用它。尝试了此操作,但不幸的是它引发了以下错误:警告:React.createElement:type无效--需要字符串(对于内置组件)或类/函数(对于复合组件)但是得到:未定义。您可能忘记了从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。您复制了确切的内容吗?请注意,
additionalElement
变量应该是一个返回jsx的函数。是的,我确实执行了此操作,并多次检查了此操作。在您的文本渲染中rer组件尝试console.log(additionalJsxElement)和console.log(typeof additionalJsxElement)尝试了此操作,但不幸的是,它引发了以下错误:警告:React.createElement:type无效--需要字符串(对于内置组件)或类/函数(对于复合组件)但是得到:未定义。您可能忘记了从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。您复制了确切的内容吗?请注意,
additionalElement
变量应该是一个返回jsx的函数。是的,我确实执行了此操作,并多次检查了此操作。在您的文本渲染中rer组件尝试console.log(additionalJsxElement)和console.log(additionalJsxElement的类型)