反射将tagName作为要呈现的字符串props传递

时间:2016-10-09 06:02:50

标签: reactjs reflection render babeljs tagname

class Button  extends React.Component{
    renderAnchor(){
      return <a onClick={this.props.onClick}>{this.props.children}</a>
    }
    renderButton(){
       return <button onClick={this.props.onClick}>{this.props.children}</button> 
    }
    render(){
         return (this.tagName==='a')?this.renderAnchor():this.renderButton();
    }

}

我有上面的react-component,我想避免代码冗余,因此,我决定删除除最后一个(render)之外的所有渲染方法,方法是将标记名替换为this.props.tagName

     render(){
         return <{this.props.tagName} onClick={this.props.onClick}>{this.props.children}</{this.props.tagName}>
    }

然而,它引发了语法错误。

如何在react / ES7 / Babel中使用标记名的反映?

1 个答案:

答案 0 :(得分:2)

您可以将标记名称指定给变量,并将该变量用作HTML标记。

例如:

render(){
    const CustomTag = this.props.tagName //assign it to the variable

    return <CustomTag
      onClick={this.props.onClick}>
          {this.props.children}
      </CustomTag>

演示:https://jsfiddle.net/88honb0z/