與運算符 &&
通過花括號包裹代碼,你可以在 JSX 中嵌入任何表達式。這也包括 JavaScript 中的邏輯與 (&&) 運算符。它可以很方便地進行元素的條件渲染。
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
總是會返回 false
。
因此,如果條件是 true
,&&
右側的元素就會被渲染,如果是 false
,React 會忽略並跳過它。
三目運算符
另一種內聯條件渲染的方法是使用 JavaScript 中的三目運算符 condition ? true : false
。
在下面這個示例中,我們用它來條件渲染一小段文本
render() { const isLoggedIn = this.state.isLoggedIn; return ( <div> The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in. </div> ); }
同樣的,它也可以用於較為復雜的表達式中,雖然看起來不是很直觀:
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') );