React中文文档 7. 条件渲染

 1.条件渲染

function UserGreeting(props) {
  return <h1>Welcome back!</h1>;
}
function GuestGreeting(props) {
  return <h1>Please sign up.</h1>;
}
function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {
    return <UserGreeting />;
  }
  return <GuestGreeting />;
}
ReactDOM.createRoot(document.getElementById('root')).render(<Greeting isLoggedIn={false}/>);

2. 条件渲染 元素变量

function UserGreeting(props) {
  return <h1>Welcome back!</h1>;
}
function GuestGreeting(props) {
  return <h1>Please sign up.</h1>;
}
function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {
    return <UserGreeting />;
  }
  return <GuestGreeting />;
}

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

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

class LoginControl extends React.Component {
  constructor(props) {
    super(props);
    // 初始化状态
    this.state = {isLoggedIn: false};
  }

  handleLoginClick=()=> {
    this.setState({isLoggedIn: true});
  }

  handleLogoutClick=()=> {
    this.setState({isLoggedIn: false});
  }

  render() {
    const isLoggedIn = this.state.isLoggedIn;
    let button;
    if (isLoggedIn) {
      button = <LogoutButton onClick={this.handleLogoutClick} />;
    } else {
      button = <LoginButton onClick={this.handleLoginClick} />; // props{ onClick : this.handleLoginClick } 传入
    }

    return (
      <div>
        <Greeting isLoggedIn={isLoggedIn} />
        {button}
      </div>
    );
  }
}
ReactDOM.createRoot(document.getElementById('root')).render(<LoginControl/>);

3.三目运算符

function Sanmu1(props){
  const isLoggedIn = props.isLoggedIn;
  return (
    <div>
      The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
    </div>
  );
}
ReactDOM.createRoot(document.getElementById('root')).render(<Sanmu1 isLoggedIn={true}/>);

 

4.三目运算符进阶 

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

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

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

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

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

class Sanmu2 extends React.Component {
  constructor(props) {
    super(props);
    // 初始化状态
    this.state = {isLoggedIn : props.isLoggedIn};
  }

  handleLoginClick=()=> {
    this.setState({isLoggedIn: true});
  }

  handleLogoutClick=()=> {
    this.setState({isLoggedIn: false});
  }

  render() {
    const isLoggedIn = this.state.isLoggedIn;
    return (
      <div>
        <Greeting isLoggedIn={isLoggedIn} />
        {isLoggedIn
          ? <LogoutButton onClick={this.handleLogoutClick} />
          : <LoginButton onClick={this.handleLoginClick} />
        }
      </div>
    );
  }
}
ReactDOM.createRoot(document.getElementById('root')).render(<Sanmu2 isLoggedIn={true}/>);

5.与运算符 &&

function Mailbox(props) {
  const unreadMessages = props.unreadMessages;
  return (
    <div>
      <h1>Hello!</h1>
      {unreadMessages.length > 0 &&
        <h2>
          You have {unreadMessages.length} unread messages.
        </h2>
      }
    </div>
  );
  // if (unreadMessages.length > 0){
  //   return (
  //     <div>
  //       <h1>Hello!</h1>
  //       <h2>
  //         You have {unreadMessages.length} unread messages.
  //       </h2>
  //     </div>
  //   )
  // }
  // else return (
  //   <div>
  //     <h1>Hello!</h1>
  //   </div>
  // )
}
const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.createRoot(document.getElementById('root')).render(<Mailbox unreadMessages={messages}/>);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值