如何在JSX中使用If-Else

时间:2015-02-06 00:51:37

标签: javascript reactjs react-jsx

我理解如何在简单的情况下使用它:

{(this.state.show) ? <span>Show</span> : null}

但如何将它用于大型DOM?

{ if (this.state.show) {
  <span className={this.state.className}>Hi</span>
  {this.state.text}
} else {
  {this.state.text}
}
}

当然,它不起作用。怎么做正确?

3 个答案:

答案 0 :(得分:5)

你不能这样做。我从你所提供的内容中看到了两个潜在的问题。首先,您只能返回一个DOM节点。其次,(这可能是因为它不是你的完整代码),你的大括号在语法上是不正确的。在不知道完整源代码的情况下,您可以尝试以下方法:

render: function() {
    var header;

    if (this.state.show) {
        header = <span className={ this.state.className }>Hi</span>;
    }
    return <div>
               { header }
               { this.state.text }
           </div>
}

答案 1 :(得分:1)

另一种做if-else的方法可以通过使用这里建议的IIFE来完成:https://facebook.github.io/react/tips/if-else-in-JSX.html

{(() => {
  if (this.state.show) {
    <span className={this.state.className}>Hi</span>
    {this.state.text}
  } else {
    {this.state.text}
  }
})()}

答案 2 :(得分:0)

首先,您不能在一个语句中使用多个组件。 你必须这样做:

#subNav.lib {
    background: #f39327;
}

好的,对于大型DOM,就像这样:

if (this.state.show) {
  <span>
    <span className={this.state.className}>Hi</span>
    {this.state.text}
  </span>
} else {
  {this.state.text}
}

{() => {
  { if (this.state.show) {
    <span>
      <span className={this.state.className}>Hi</span>
      {this.state.text}
    </span>
    } else {
      {this.state.text}
    }
}}

顺便说一句,如果 - else

,我已经创建了一个小型库来执行lisp样式
{ this.state.show ? (
    <span>
      <span className={this.state.className}>Hi</span>
      {this.state.text}
    </span>
  ) : (
    {this.state.text}
  )
}