React——conditional render

条件渲染一:element variable

function UserGreeting(props) {
  return <h1>Welcome back!</h1>;
}

function GuestGreeting(props) {
  return <h1>Please sign up.</h1>;
}

function LoginButton(props) {
  return (
    <button onClick={props.onClick}>Login</button>
  );
}
      
function LogoutButton(props) {
  return (
    <button onClick={props.onClick}>Logout</button>
  );
}

function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  return isLoggedIn ? <UserGreeting /> : <GuestGreeting />;
}

class GreetingControl extends React.Component {
  constructor(props) {
    super(props);
    this.handleLogin = this.handleLogin.bind(this);
    this.handleLogout = this.handleLogout.bind(this);
    this.state = {
      isLoggedIn: false
    };
  }
  
  handleLogin() {
    this.setState({
      isLoggedIn: true
    });
  }
    
  handleLogout() {
    this.setState({
      isLoggedIn: false
    })
  }
  
  render() {
    const isLoggedIn = this.state.isLoggedIn; // 一:element variable
    let button; 
    if (isLoggedIn) {
      button = <LogoutButton onClick={this.handleLogout} />;
    } else {
      button = <LoginButton onClick={this.handleLogin} />;
    }
    // button = (!isLoggedIn) ? (<LoginButton onClick={this.handleLogin} />) : (<LogoutButton onClick={this.handleLogout} />);
    return (
      <div>
        <Greeting isLoggedIn={isLoggedIn} />
        {button}
      </div>
    );
  }
}

ReactDOM.render(
  <GreetingControl />,
  document.getElementById('root')
);




条件渲染二:Inline If with Logical && Operator

class MailBox extends React.Component {
  render() {
    const unreadMessages = this.props.unreadMessages;
    return (
      <div>
        <h1>Hello</h1>
        // 二:Inline If with Logical && Operator
        {unreadMessages.length > 0 && 
          <h1>You have {unreadMessages.length} messages to read.</h1>
        }
      </div>
    );
  }
}

const unreadMessages = ['React', 'Re: React', 'Re: Re: React'];
ReactDOM.render(
  <MailBox unreadMessages={unreadMessages} />,
  document.getElementById('root')
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值