09-12-2021
前言:
我們時常會在同一個頁面中需要顯示不同的畫面,可能是因為登入時的登入畫面或是按鈕的toggle情境,各式各樣的畫面顯示,使用條件render就可以讓畫面更簡潔。
React 中的 render中的畫面與JavaScript 中一致,所以我們可以在裡面寫上if
、三元運算子
,來建立目前的狀態與元件,讓React根據它們更新UI。
function UserHome(props) {
return <h1>歡迎回來!</h1>;
}
function GuestHome(props) {
return <h1>不好意思,請先登入!</h1>;
}
isLoggedIn={true}:
判斷有登入,顯示不同的畫面。Login
狀態,const [isLogin, setisLogin] = useState(false);
POST
API後的結果,把結果用setisLogin
存取起來,判斷是否為true
<GuestHome />
const [isLogin, setisLogin] = useState(false);// 用來存取login狀態
//預設false
// POST API IS HERE !ß
function Home(props) {
const isLoggedIn = props.isLoggedIn;
if (isLoggedIn) {
return <UserHome />;
}
return <GuestHome />;
}
ReactDOM.render(
<Home isLoggedIn={false} />,
document.getElementById('root')
);
使用變數儲存element,可以有條件的render一部分的component
將button定義顯示的<button/>
內容
...定義控制狀態
render() {
const isLoggedIn = this.state.isLoggedIn;
let button;
if (isLoggedIn) {
button = <LogoutButton onClick={this.handleLogoutClick} />;
} else {
button = <LoginButton onClick={this.handleLoginClick} />;
}
return(
....顯示button
)
可以使用大花括號在JSX嵌入表達式。
true
時,&&
右側的element
即會回傳falseelement
被忽略,但依舊回傳預設值。function Message(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
<h1>Hello!</h1>
{unreadMessages.length > 0 &&
<h2>
You have {unreadMessages.length} unread messages.
</h2>
}
</div>
);
}
const messages = ['Message', 'Re: Message', 'Re:Re: Message'];
ReactDOM.render(
<Mailbox unreadMessages={messages} />,
document.getElementById('root')
);
透過JavaScript的三元運算子來顯示不同的畫面,如果條件太複雜,不如就把component分解吧!
條件 (三元) 運算子
條件 ? true : false
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
</div>
);
}
有些情況下,我們會需要隱藏component本人,在 component 中回傳 null 並不會影響 component 的生命週期方法。
//範例
{Firstdata ? (
<CustomModal
isOpen={isOpen}
onClose={onClose}
Firstdata={Firstdata}
/>
) : null}
參考:
條件render