带有来自变量的 HTML 标记的 JSX

JSX with a HTML tag from a variable

我在 JSX 中定义了一个 React 组件,其中 returns 一个使用 tdth 的单元格,例如:

if(myType === 'header') {
  return (
    <th {...myProps}>
      <div className="some-class">some content</div>
    </th>
  );
}

return (
  <td {...myProps}>
    <div className="some-class">some content</div>
  </td>
);

是否有可能以 HTML 标签取自变量的方式编写 JSX?喜欢:

let myTag = myType === "header" ? 'th' : 'td';
return (
  <{myTag} {...myProps}>
    <div className="some-class">some content</div>
  </{myTag}>
);

上面的代码 returns 一个错误 "unexpected token" 指向 {。我正在使用带有 babel 插件的 webpack 来编译 JSX。

您可以这样做:

const content = <div> some content </div>
return (
  {myType === 'header'
    ? <th>{content}</th>
    : <td>{content}</td>
  }
)

请注意,这并没有真正解决您关于 "dynamic tag" 的问题,而是您似乎遇到的问题。

尝试像这样设置组件状态和渲染:

render: function() {

            return(
                <this.state.tagName {...myProps}>
                  <div className="some-class">some content</div>
                </this.state.tagName>
            );

        },

第一个答案对我的情况不起作用,所以我用另一种方式解决了它。 来自 React documentation each element converts to pure JS like this.

因此可以像这样为 React 组件创建动态元素:

let myTag = myType === "header" ? 'th' : 'td';

React.createElement(
  myTag,
  {className: 'some-class'},
  <div className="some-class">some content</div>
)