經過花括號包裹代碼,你能夠在 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
老是會返回 false
。this
所以,若是條件是 true
,&&
右側的元素就會被渲染,若是是 false
,React 會忽略並跳過它。spa
另外一種內聯條件渲染的方法是使用 JavaScript 中的三目運算符 condition ? true : false
。code
在下面這個示例中,咱們用它來條件渲染一小段文本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> ); }
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') );