JSX 中內聯條件渲染的方法

與運算符 &&

經過花括號包裹代碼,你能夠在 JSX 中嵌入任何表達式。這也包括 JavaScript 中的邏輯與 (&&) 運算符。它能夠很方便地進行元素的條件渲染。express

function Mailbox(props) {
  const unreadMessages = props.unreadMessages;
  return (
    <div>
      <h1>Hello!</h1>
      {unreadMessages.length > 0 &&
        <h2>
          You have {unreadMessages.length} unread messages.
        </h2>
      }
    </div>
  );
}

const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(
  <Mailbox unreadMessages={messages} />,
  document.getElementById('root')
);

之因此能這樣作,是由於在 JavaScript 中,true && expression 老是會返回 expression, 而 false && expression 老是會返回 falsethis

所以,若是條件是 true&& 右側的元素就會被渲染,若是是 false,React 會忽略並跳過它。spa

 

三目運算符

另外一種內聯條件渲染的方法是使用 JavaScript 中的三目運算符 condition ? true : falsecode

在下面這個示例中,咱們用它來條件渲染一小段文本blog

render() {
  const isLoggedIn = this.state.isLoggedIn;
  return (
    <div>
      The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
    </div>
  );
}

一樣的,它也能夠用於較爲複雜的表達式中,雖然看起來不是很直觀:ip

render() {
  const isLoggedIn = this.state.isLoggedIn;
  return (
    <div>
      {isLoggedIn
        ? <LogoutButton onClick={this.handleLogoutClick} />
        : <LoginButton onClick={this.handleLoginClick} />
      }
    </div>
  );
}

if...else...語句

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

ReactDOM.render(
  // Try changing to isLoggedIn={true}:
  <Greeting isLoggedIn={false} />,
  document.getElementById('root')
);
相關文章
相關標籤/搜索