JSX带有变量的HTML标记

Gre*_*reg 8 javascript reactjs react-jsx

我有使用要么它返回一个细胞在JSX限定的阵营部件td或th,例如:

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>
);
Run Code Online (Sandbox Code Playgroud)

是否有可能以这样的方式编写JSX,即从变量中获取HTML标记?喜欢:

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

上面的代码返回指向的错误"意外令牌" {.我正在使用带有babel插件的webpack来编译JSX.

ste*_*orx 8

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

render: function() {

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

        },
Run Code Online (Sandbox Code Playgroud)

  • 呃,谢谢你的提示.它可以在不担心状态的情况下工作,只需将标记名称赋给变量并在JSX中使用它,例如:`let tx ='td'; return(<tx {... myProps}> ...`等等. (2认同)
  • 实际上,变量名必须以大写字母开头,否则react会将其视为HTML标记并呈现`tx`而不是变量的值.如果变量名是"Tx",那么它正确地呈现其内容(即"td"或"th"). (2认同)

Kev*_*Kev 6

你可以这样做:

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

请注意,这并不能真正解决您关于"动态标记"的问题,而是您似乎遇到的问题.