๐ Conditional Rendering
Conditional Rendering | ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋ ๋๋ง. ( ์กฐ๊ฑด๋ถ ๋ ๋๋ง ) : ์ด๋ ํ ์กฐ๊ฑด์ ๋ฐ๋ผ์ ๋ ๋๋ง์ด ๋ฌ๋ผ์ง๋ ๊ฒ. |
๐ค Inline Conditions
In + line : ์ฝ๋๋ฅผ ๋ณ๋๋ก ๋ถ๋ฆฌ๋ ๊ณณ์ ์์ฑํ์ง ์๊ณ , ํด๋น ์ฝ๋๊ฐ ํ์ํ ๊ณณ ์์ ์ง์ ์ง์ด๋ฃ๋๋ค๋ ๋ป.
Inline Conditions | ์กฐ๊ฑด๋ฌธ์ ์ฝ๋ ์์ ์ง์ด๋ฃ๋ ๊ฒ. |
โ Inline If
- if๋ฌธ์ ํ์ํ ๊ณณ์ ์ง์ ์ง์ด๋ฃ์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ.
- if๋ฌธ๊ณผ ๋์ผํ ํจ๊ณผ๋ฅผ ๋ด๊ธฐ ์ํด && ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
- && ์ฐ์ฐ์๋ฅผ jsx ์ฝ๋ ์์์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ์ง์ด๋ฃ๋ ๋ฐฉ๋ฒ์ด๋ค.
์์ ์ฝ๋ )
function Mailbox(props){
const unreadMessages = props.unreadMessages;
return(
<div>
<h1>์๋
ํ์ธ์</h1>
{unreadMessages.length > 0 &&
<h2>
ํ์ฌ {unreadMessages.length}๊ฐ์ ์ฝ์ง ์์ ๋ฉ์์ง๊ฐ ์๋ค.
</h2>
}
</div>
);
}
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
unreadMessages.length ๊ฐ 0 ๋ณด๋ค ํฐ ์ง ํ๊ฐํ๋ ์กฐ๊ฑด๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๋ผ <h2> ํ๊ทธ๋ก ๋๋ฌ์ธ์ธ ๋ถ๋ถ์ด ๋ ๋๋ง ๋๊ฑฐ๋, ์๋๋ค.
1. unreadMessages๊ฐ 0๋ณด๋ค ํฌ๋ค๋ฉด?
: <h2> ํ๊ทธ ๋ถ๋ถ์ด ๋ ๋๋ง๋๋ค.
2. unreadMessages๊ฐ 0๋ณด๋ค ์๋ค๋ฉด?
: <h2> ํ๊ทธ ๋ถ๋ถ์ด ๋ ๋๋ง ์๋๋ค.
โ Inline If-Else
- If-Else ๋ถ๋ถ์ ํ์ํ ๊ณณ์ ์ง์ ๋ฃ์ด์ ์ฌ์ฉํ๋ ๊ฒ.
- Inline If๋ ๋ณด์ฌ์ฃผ๊ฑฐ๋, ์๋ณด์ฌ์ฃผ๊ฑฐ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ๋ง ์์ง๋ง, Inline If-Else๋ ์กฐ๊ฑด๋ฌธ์ ๊ฐ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ์๋ฆฌ๋จผํธ๋ฅผ ๋ณด์ฌ์ค ๋ ์ฌ์ฉํ๋ค. ์ด๋ฅผ ์ํด ? ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
์์ ์ฝ๋ 1 )
function UserStatus(props){
return(
<div>
์ด ์ฌ์ฉ์๋ ํ์ฌ <b>{props.isLoggedIn ? '๋ก๊ทธ์ธ' : '๋ก๊ทธ์ธํ์ง ์์'}</b>์ํ์
๋๋ค.
</div>
)
}
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
1. props.isLoggedIn ๊ฐ์ด true์ธ ๊ฒฝ์ฐ
: '๋ก๊ทธ์ธ'์ด๋ผ๋ ๋ฌธ์์ด์ด ์ถ๋ ฅ.
2. props.isLoggedIn ๊ฐ์ด false์ธ ๊ฒฝ์ฐ
: '๋ก๊ทธ์ธํ์ง ์์'์ด๋ผ๋ ๋ฌธ์์ด์ด ์ถ๋ ฅ.
์์ ์ฝ๋ 2 )
function LoginControl(props){
const [isLoggedIn, setIsLoggedIn] = useState(false);
const handleLoginClick = () => {
setIsLoggedIn(true);
}
const handleLogoutClick = () => {
setIsLoggedIn(false);
}
return(
<div>
<Greeting isLoggedIn={isLoggedIn} />
{isLoggedIn
? <LogoutButton onClick={handleLogoutClick} />
: <LoginButton onClick={handleLoginClick} />
}
</div>
)
}
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
์ ์ฝ๋์ฒ๋ผ ๋ฌธ์์ด์ด ์๋ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฃ์ด์ ์ฌ์ฉํ ์๋ ์๋ค.
1. isLoggedIn์ ๊ฐ์ด true์ธ ๊ฒฝ์ฐ?
: LogoutButton ์ถ๋ ฅ.
2. isLoggedIn์ ๊ฐ์ด false์ธ ๊ฒฝ์ฐ?
: LoginButton ์ถ๋ ฅ.
โ Component ๋ ๋๋ง ๋ง๊ธฐ
Component๋ฅผ ๋ ๋๋งํ๊ณ ์ถ์ง ์์ ๋๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
null์ ๋ฆฌํดํ๋ฉด ๋๋ค.
์์ ์ฝ๋ 1 )
function WarningBanner(props){
if(!props.warning){ //props.warning์ ๊ฐ์ด false์ธ ๊ฒฝ์ฐ null ๋ฆฌํด.
return null;
}
//props.warging์ ๊ฐ์ด true์ธ ๊ฒฝ์ฐ์๋ง ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค.
return(
<div>๊ฒฝ๊ณ !</div>
);
}
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
์์ ์ฝ๋ 2 )
function MainPage(props){
const [showWarning, setShowWarning] = useState(false);
const handleToggleClick = () => {
setShowWarning(prevShowWarning => !prevShowWarning);
}
return(
<div>
//showWarning์ด๋ผ๋ state์ ๊ฐ์ WarningBanner ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌํ์ฌ,
<WarningBanner warning={showWarning) />
<button onClick={handleLoggleClick}>
//showWarning ๊ฐ์ ๋ฐ๋ผ ๊ฒฝ๊ณ ๋ฌธ์ ํ์ํ๊ฑฐ๋ ํ์ํ์ง ์๊ฒ ๋๋ค.
{showWarning ? '๊ฐ์ถ๊ธฐ' : '๋ณด์ด๊ธฐ'}
</button>
</div>
)
}
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
๐ฑ๐ป ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํด๋ฐ ๋ง๋ค๊ธฐ
creative react app ํ๋ก์ ํธ๋ฅผ ์ฐ๋ค.
Toolbar.jsx
//Toolbar ์ด๋ฆ์ ํจ์ ์ปดํฌ๋ํธ ์์ฑ.
import React from "react";
const styles = {
wrapper: {
padding:16,
display: "flex",
flexDirection: "row",
borderBottom: "1px solid grey",
},
greeting: {
marginRight: 8,
},
};
//isLoggedIn ๊ฐ์ props๋ก ๋ฐ์์,์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ์ฌ์ฉํ์ฌ ํ์๋ฉ์์ง๋ฅผ ํ์ํ๊ฑฐ๋ ๊ฐ์ถ๊ณ ,
//๋ก๊ทธ์ธ,๋ก๊ทธ์์์ ๋ณด์ฌ์ฃผ๊ฑฐ๋ ์จ๊ธฐ๋ ์ญํ ์ ํ๋ค.
function Toolbar(props){
const { isLoggedIn, onClickLogin, onClickLogout } = props;
return (
<div style={styles.wrapper}>
//&&,? ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ Inline If / Inline If-Else ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๊ตฌํ.
{isLoggedIn && <span style={styles.greeting}>ํ์ํฉ๋๋ค!</span>}
{isLoggedIn ? (
<button onClick={onClickLogout}>๋ก๊ทธ์์</button>
) : (
<button onClick={onClickLogin}>๋ก๊ทธ์ธ</button>
)}
</div>
);
}
export default Toolbar;
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
์ด๋ ๊ฒ ๋ง๋ ํด๋ฐ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ฒ ๋ค.
LandingPage.jsx
//LandingPage ์ด๋ฆ์ ํจ์ ์ปดํฌ๋ํธ ์์ฑ.
import React,{useState} from "react";
import Toolbar from "./Toolbar";
function LandingPage(props){
const [isLoggedIn, setIsLoggedIn] = useState(false);
const onClickLogin = () => {
setIsLoggedIn(true);
};
const onClickLogout = () => {
setIsLoggedIn(false);
};
return (
<div>
<Toolbar
isLoggedIn={isLoggedIn}
onClickLogin={onClickLogin}
onClickLogout={onClickLogout}
/>
<div style={{ padding: 16 }}>์ํ๊ณผ ํจ๊ปํ๋ ๋ฆฌ์กํธ ๊ณต๋ถ!</div>
</div>
);
}
export default LandingPage;
//์ฝ๋ ์ฐธ๊ณ
//์ธํ๋ฐ_์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
LandingPage ์ปดํฌ๋ํธ๋ useState Hook์ ์ฌ์ฉํด์ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ Toolbar ์ปดํฌ๋ํธ์ ์ ๋ฌํ์ฌ ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ Toolbar์ ์ ์ ํ ์ธํฐํ์ด์ค๊ฐ ํ์๋๋๋ก ํ๋ค.
์ด์ ๋ง๋ LandingPage ์ปดํฌ๋ํธ๋ฅผ ์ค์ ํ๋ฉด์ ๋ ๋๋งํ๊ธฐ ์ํด์ index.js ํ์ผ์ ์์ ํ๋ค.
๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฌ๋ณด๊ฒ ๋ค.
๋ก๊ทธ์ธ ์ํ๊ฐ true๋ก ๋ฐ๋๋ฉด์ ํ์ ๋ฉ์์ง๊ฐ ํ์๋๊ณ , ๋ก๊ทธ์์ ๋ฒํผ์ด ๋์จ๋ค.
๋ก๊ทธ์์์ ๋๋ฅด๋ฉด ์๋๋๋ก ๋์จ๋ค.