๐Ÿ“–[React]Conditional Rendering

ํ˜ฑยท2022๋…„ 7์›” 11์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
12/28

๐Ÿ’—Conditional Rendering

์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง: ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ Œ๋”๋ง์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ

Truthy

(true๋Š” ์•„๋‹ˆ์ง€๋งŒ true๋กœ ์—ฌ๊ฒจ์ง€๋Š” ๊ฐ’)

true
{} (empty object)
[] (empty array)
22 (number, not zero)
"0", "false", "hi" (string, not empty)

Falsy

(false๋Š” ์•„๋‹ˆ์ง€๋งŒ false๋ผ๊ณ  ์—ฌ๊ฒจ์ง€๋Š” ๊ฐ’)

false
0, -0 (zero, minus zero)
0n (BigInt zero)
'', "", `` (empty string)
null
undefined
NaN (not a number)

โœ Element Variables

Element๋ฅผ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ €์žฅํ•ด์„œ ๋‹ค๋ฃจ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

function LoginControl(props){
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  
  const handleLoginClick = () => {
    setIsLoggedIn(true);
  }
  
  const handleLogoutClick = () =>{
    setIsLoggedIn(false);
  }
  
  //Element๋ฅผ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ €์žฅ
  let button;
  if (isLoggediN) {
    button = <LogoutButton onClick={handleLogoutClick}/>;
  } else {
    button = <LogInButton onClick = {handleLoginClick}/>;
  }
  
  return (
    <div>
      <Greeting isLoggedIn = {isLoggedIn}/>
      {button} //Element๋ฅผ ์‚ฌ์šฉ
    </div>
   )
}

โœ Inline Condition

์กฐ๊ฑด๋ฌธ์„ ์ฝ”๋“œ ์•ˆ์— ์ง‘์–ด ๋„ฃ๋Š” ๊ฒƒ

1. Inline If

If ๋ฌธ์„ ์ง‘์–ด ๋„ฃ๋Š” ๊ฒƒ, &&์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

&&์—ฐ์‚ฐ์ž: ์–‘์ชฝ์— ๋‚˜์˜ค๋Š” ๊ฒƒ์ด ๋ชจ๋‘ true์—ฌ์•ผ ๊ฒฐ๊ณผ๊ฐ€ tru๊ฐ€ ๋จ

true && expression => expresion
false && expression => false

์ฒซ๋ฒˆ์งธ (์•ž๋ถ€๋ถ„)์ด true ์ด๋ฉด ๋‘๋ฒˆ์งธ ์กฐ๊ฑด๋ฌธ (expression)์„ ํ‰๊ฐ€ํ•˜๊ณ ,
์ฒซ๋ฒˆ์งธ (์•ž๋ถ€๋ถ„)์ด false์ด๋ฉด expression ์ž์ฒด๋ฅผ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์Œ!
true -> expression์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๊ฐ’์ด ๊ฒฐ๊ณผ
false -> flase expression์˜ ๊ฒฐ๊ด๊ฐ’

function Mailbox(props) {
  const unreadMessages = props.unreadMessages;
  
  return(
    <div>
      <h1>์•ˆ๋…•ํ•˜์„ธ์š”!</hi>
      {unreadMessages.length > 0 &&
        <h2> 
          ํ˜„์žฌ {unreadMessages.legnth}๊ฐœ ์ฝ์ง€ ์•Š์€ ๋ฉ”์„ธ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
        </h2>
        }
      </div>
    );
}

2. Inline if-else

? ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ

?์—ฐ์‚ฐ์ž: Contion ? true : false

์กฐ๊ฑด๋ฌธ์ด true์ด๋ฉด ์•ž๋ถ€๋ถ„์„ ์ถœ๋ ฅ
์กฐ๊ฑด๋ฌธ์ด false์ด๋ฉด ๋’ท๋ถ€๋ถ„์„ ์ถœ๋ ฅ

//์˜ˆ์ œ 1
function UserStatus(props){
  return(
    <div>
      ์ด ์‚ฌ์šฉ์ž๋Š” ํ˜„์žฌ <b>{props.isLoggedIn ? '๋กœ๊ทธ์ธ' : '๋กœ๊ทธ์ธ๋˜์ง€ ์•Š์€'}</b> ์ƒํƒœ์ž…๋‹ˆ๋‹ค
    </div>
  );
}

//์˜ˆ์ œ 2
function LoginControl(props) {
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  
  const handleLoginClick = () => {
    setIsLoggedIn(true);
  }
  
  const handleLogoutClick = () => {
    setIsLoggedIn(false);
  }
  
  return ( 
    <div>
      <Gretting isLoggedIn= {isLoggedIn}/>
      {isLoggedIn
      	? <LogoutButton onClick = {handleLogoutClick}/>
        : <LogInButton onClick = {handleLogInClick}/>
      }
   </div>
  );
}

โœ Component ๋ Œ๋”๋ง ๋ง‰๊ธฐ

null์„ return ํ•˜๋ฉด ๋จ!

function WarningBanner(props){
  if (!props.warning) {
    return null;
  }
  return(
    <div>๊ฒฝ๊ณ !</div>
    );
}

//null์„ returnํ•˜๋Š” ํ•จ์ˆ˜ ์‚ฌ์šฉ
function MainPage(props) {
  const [showWarning, setShowWarning] =useState(false);
  
  const hadleToggleClick = () => {
    setShowWarning(prevShowWarning => !prevShowWarning);
  }
  
  return (
    <div>
      <WarningBanner warning={showWarning}/>
      <button onClick={handleToggleClick}>
        {showWarning ? '๊ฐ์ถ”๊ธฐ' : '๋ณด์ด๊ธฐ'}
      </button>
    </div>
  )
}
profile
new blog: https://hae0-02ni.tistory.com/

0๊ฐœ์˜ ๋Œ“๊ธ€