当前位置: 首页 > 知识库问答 >
问题:

jsx和React中的动态标记名

东郭宏朗
2023-03-14

我试着为html标题标签(h1,h2,h3等)写一个React组件,其中标题优先级根据我们在props中定义的优先级动态变化。

这就是我要做的。

预期产出:

这是行不通的。有什么方法可以做到这一点吗?


共有3个答案

慕兴平
2023-03-14

为完整起见,如果要使用动态名称,也可以直接调用React.createElement,而不是使用JSX:

React.createElement(`h${this.props.priority}`, null, 'Hello')

这避免了必须创建一个新的变量或组件。

有道具:

React.createElement(
  `h${this.props.priority}`,
  {
    foo: 'bar',
  },
  'Hello'
)

从文档中:

创建并返回给定类型的新React元素。类型参数可以是标记名字符串(如'div''span'),也可以是React组件类型(类或函数)。

使用JSX编写的代码将转换为使用React.createElement()。如果使用JSX,通常不会直接调用React.createElement()。有关更多信息,请参阅React with JSX。

胡志
2023-03-14
匿名用户

如果您使用TypeScript,您会看到这样的错误:

类型“{children:string;}”没有与类型“IntrinsicAttributes”相同的属性。ts(2559)

TypeScript不知道CustomTag是有效的超文本标记语言标记名称,并抛出一个无益的错误。

要修复此问题,请将CustomTag转换为JSX. IntrinsicElements的key!

const CustomTag = `h${this.props.priority}` as keyof JSX.IntrinsicElements;

<CustomTag>Hello</CustomTag>

夏法
2023-03-14

没有办法做到这一点,只需将其放入变量中(首字母大写):

const CustomTag = `h${this.props.priority}`;

<CustomTag>Hello</CustomTag>
 类似资料:
  • 问题内容: 我尝试编写一个React组件。对于html标题标签(h1,h2,h3等),其中标题优先级根据我们在道具中定义的优先级动态变化。 这是我尝试做的。 预期输出: 这是行不通的。有什么可能的方法可以做到这一点? 问题答案: 无法就地执行此操作,只需将其放在变量中(首字母大写):

  • 问题内容: 我正在尝试根据组件的类型动态呈现组件。 例如: 那给我一个编译时的错误(使用browserify进行gulp)。我使用数组语法的地方应该是XML。 我可以通过为每个组件创建一个方法来解决此问题: 但这将意味着为我创建的每个组件提供一种新方法。必须对此问题有一个更优雅的解决方案。 我很乐意提出建议。 问题答案: 编译为,它期望将字符串(HTML标记)或函数(ReactClass)作为第一

  • 我正在寻找渲染基于字符串的组件。本质上,我希望找到相当于JavaScript动态函数名能力的JSX()。 所以,如果我有一个字符串,比如

  • 我有一个比较简单的问题,就是尝试将内联脚本添加到React组件中。我目前所掌握的: 我还尝试过: 这两种方法似乎都无法执行所需的脚本。我想我错过的是一件简单的事。有人能帮忙吗? PS:忽略foobar,我有一个真实的id实际上在使用,我不想分享。

  • 问题内容: 我正在尝试在JSX内部使用pre标签。当您在JSX中使用pre标签时,它根本不格式化。为什么?为了使用pre标签,我需要执行以下操作: 为什么? 问题答案: 使用模板文字 模板文字允许使用多行字符串,以保留前导/尾随空格和换行符。

  • 我有一个组件文件夹。它们用一个文件公开,如下所示: 我有一个名为Status的JSX组件,如下所示: 它的任务是加载命名组件的行。 然后我有一个名为的组件,看起来像这样: 从'react'导入React 通过