繁体   English   中英

如何在React组件中将字符串呈现为子项?

[英]How do I render a string as children in a React component?

拿一个简单的组件:

function MyComponent({ children }) {
  return children;
}

这有效:

ReactDOM.render(<MyComponent><span>Hello</span></MyComponent>, document.getElementById('stage'));

但这没有(我删除了<span/> ):

ReactDOM.render(<MyComponent>Hello</MyComponent>, document.getElementById('stage'));

因为React尝试在字符串上调用render

Uncaught TypeError: inst.render is not a function

另一方面,这很好用:

ReactDOM.render(<p>Hello</p>, document.getElementById('stage'));

如何使<MyComponent/>表现得像<p/>

如果您使用的是React 16.2或更高版本,则可以使用React片段执行此操作:

const MyComponent = ({children}) => <>{children}</>

如果您的编辑器不支持片段语法,这也将起作用:

const MyComponent = ({children}) =>
    <React.Fragment>{children}</React.Fragment>

请记住,就React而言,您仍在创建和返回组件(MyComponent类型) - 它只是不创建额外的DOM标记。 这是一个混合包:

  • 好处:你仍会在React Debug Tools中看到<MyComponent>标签。

  • 缺点:如果您正在使用Typescript或Flow,您的转换器可能会抱怨,因为MyComponent的返回类型仍然是React元素(React.ReactElement)。

差别是<p>是一个html元素而MyComponent是一个React Component。

反应的组分需要渲染/ 返回一个单个部件或一个单一的HTML元素。

'Hello'既不是。

您至少需要一个顶级HTML元素。 您的组件实际上不能只输出字符串,这不是React的工作方式。

最简单的解决方案是简单地让MyComponent在span或div中包装它的输出。

function MyComponent({ children }) {
  return <span>{ children }</span>;
}

目前,在组件的渲染中,您只能返回一个节点; 如果你有一个要返回的div列表,你必须将你的组件包装在div,span或任何其他组件中。

资源

你要返回的不是根节点。 您正在返回一个react组件,它返回一个字符串,它应该返回一个HTML元素。

您可以传递已经用HTML元素包装的字符串(就像您在示例中所做的那样),也可以将字符串包装在“MyComponent”中的HTML元素中,就像这样

function MyComponent({ children }) {
  return <span>{ children }</span>;
}

React可以呈现React组件(类)或HTML标签(字符串)。 任何HTML标记按惯例都是小写的,其中Component是大写的。 每个React组件都必须只呈现一个Tag(或null)。 回答你的问题:你做不到。

在上面的示例中,您将呈现使用children属性给出的内容,其中这将在内部呈现标记或无效的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM