react with JSX for {if…else…}

原创 2016年05月30日 15:13:49

在react中用jsx渲染dom的时候经常会遇到if条件判断,然而在jsx中竟是不允许if条件判断的。以下有几种判断方式,可以根据自己的应用场景,挑选适合的。

方案一:

class HelloMessage extends React.Component {
  render (){
    let userMessage;
    if (this.props.loggedIn) {
      userMessage = (
        <span>
          <h2>{ `Welcome Back ${ this.props.name }` }</h2>
          <p>You can visit settings to reset your password</p>
        </span>
      )
    } else {
      userMessage = (
        <h2>Hey man! Sign in to see this section</h2>
      )
    }
    return(
      <div>
        <h1>My Super React App</h1>
        { userMessage }
      </div>
    )
  }
}

方案二:

class HelloMessage extends React.Component {

  renderUserMessage(){
    if (this.props.loggedIn) {
      return (
        <span>
          <h2>{ `Welcome Back ${ this.props.name }` }</h2>
          <p>You can visit settings to reset your password</p>
        </span>
      );
    } else {
      return (
        <h2>Hey man! Log in to see this section</h2>
      );
    }
  }

  render (){        
    return(
      <div>
        <h1>My Super React App</h1>
        { this.renderUserMessage() }
      </div>
    )
  }
}

方案三:

class HelloMessage extends React.Component {
  render (){        
    return(
      <div>
        <h1>
          { this.props.loggedIn ?  'You are logged In' : 'You are not logged In' }
        </h1>
      </div>
    )
  }

方案四:

class HelloMessage extends React.Component {
  render (){
    return(
      <div>
        <h1>My Super React App</h1>
        { this.props.loggedIn ?
            <span>
              <h2>{ `Welcome Back ${ this.props.name }` }</h2>
              <p>You can visit settings to reset your password</p>
            </span>
            :
            <h2>Hey man! Log in to see this section</h2>
        }
      </div>
    )
  }
}

方案五:

// 拆分成小函数
class HelloMessage extends React.Component {
  renderLogin() { // 如果这里有多行,推荐用这种方法
    const {loggedIn, name} = this.props;
    if (!loggedIn) return;

    return (<span>
      <h2>Welcome Back {name}</h2>
      <p>You can visit settings to reset your password</p>
    </span>);
  }

  render (){
    return(
      <div>
        <h1>My Super React App</h1>
        {this.renderLogin()}
      </div>
    );
  }
}

综上:短小的字段判断只能用三元表达式,如果是大块的元素都需要区分,就要利用变量了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

05、react之 条件判断的四种写法

条件判断的四种写法         1、三元表达式 ? : 2、使用变量,通过函数使用条件判断语句,返回一个字符串 3、直接在{}中调用函数 4、使用比较运算符 &&   ||  ...

JSX语法详解

JSX语法详解 本文在官方文档的基础上,进行了扩展扩展补充和一些解读。基本涵盖了JSX语法的细枝末节,JSX语法本身并不复杂,也容易掌握。本文供学习参考使用。 一、基础1、JSX是什么JS...

React-(if)条件渲染-condition

概述: 在React中,你封装很多基础组件,但是你是有选择使用特定的组件,这时候就需要依赖应用的状态,类似javaScript中if 1.例子: //定义基础组件 function Orange(){...

ReactJS学习笔记(四)-条件判断的几种形式

梦想不是挂在嘴边炫耀的空气。 在React中,一个组件的HTML标签与生成这些标签的代码内在地紧密联系在一起。这意味着你可以轻松的利用javascript强大的魔力,比如循环和条件判断等。想要在组件中...

VMWare报错"指定的文件不是虚拟磁盘"或“The file specified is not a virtual disk”

今天打开原来创建的虚拟机,突然报错”指定的文件不是虚拟磁盘”,如下图: 由于之前这个虚拟机创建了快照,因此下面的解决方法是基于快照的。 1.打开虚拟机的.vmx文件,我的虚拟机名字为”Ubuntu...

React-JSX详解

一、 1、JSX:即JavaScript XML——一种在React组建内部构建标签的类XML语法。(增强React程序组件的可读性); 2、使用动态值: JSX将两个花括号:{}渲染成动态值,花括...

求解1+2+3+...+n,要求不能使用乘除法、while、for、if 、else、switch、case等关键字

方法一:利用递归以及&&的短路原理int Sum(int num, int& sum) { num&&Sum(num-1,sum);//递归跳出条件,当num为假时,无需判断后序语句,返回su...

Swift第三课 分支语句 if else for forin switch while do-while

1:if else 条件判断语句 在最基本的if语句中,条件语句只有一个,如果条件为true时,执行if语句块中的语句。 var temp = 90 if temp == 90{ printl...

Python中在for循环中嵌套使用if和else语句的技巧

转自:http://www.jb51.net/article/86987.htm for...[if]...构建List (List comprehension) 1.简单的for...[if...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)