5. conditional rendering(조건부 랜더링)

src/App.jsx

import UserList from './05/UserList'
export default function App() {
  return (
    <>
      <UserList/>
    </>
  )
}

src/05/UserList.jsx

import UserGreeting from "./UserGreeting"

export default function UserList() {
  return (
    <>
      <UserGreeting isLoggedIn={true} username="hong"/>
      <UserGreeting isLoggedIn={false}/>
      <UserGreeting/>
    </>
  )
}

if/else

src/05/UserGreeting.jsx

export default function UserGreeting({isLoggedIn = false, username = "Guest"}){
  if (isLoggedIn){
    return <h2 className="text-4xl bg-lime-400 rounded-full p-7 m-8">Welcome {username}</h2>
  }else{
    return <h2 className="text-4xl bg-pink-500 rounded-full p-7 m-8">Please log in to continue {username}</h2>
  }

삼항연산자

src/05/UserGreeting.jsx

export default function UserGreeting({isLoggedIn = false, username = "Guest"}){
  return(isLoggedIn ? <h2 className="text-4xl bg-lime-400 rounded-full p-7 m-8">Welcome {username}</h2> :
                      <h2 className="text-4xl bg-pink-500 rounded-full p-7 m-8">Please log in to continue {username}</h2>)
}

src/05/UserGreeting.jsx

export default function UserGreeting({isLoggedIn = false, username = "Guest"}){
  const welcomeMessage =  <h2 className="text-4xl bg-lime-400 rounded-full p-7 m-8">Welcome {username}</h2>
  const loginPrompt = <h2 className="text-4xl bg-pink-500 rounded-full p-7 m-8">Please log in to continue {username}</h2>
  return(isLoggedIn ? welcomeMessage : loginPrompt)
}

논리연산자를 이용한 단축평가

src/05/UserGreeting.jsx

export default function UserGreeting({isLoggedIn = false, username = "Guest"}){
  const welcomeMessage =  <h2 className="text-4xl bg-lime-400 rounded-full p-7 m-8">Welcome {username}</h2>
  const loginPrompt = <h2 className="text-4xl bg-pink-500 rounded-full p-7 m-8">Please log in to continue {username}</h2>

   return(
    <>
      {isLoggedIn && welcomeMessage} 
      {isLoggedIn || loginPrompt}
    </>
  )
  }

단축 평가

falsy 값
  • false
  • 0, -0
  • ’’, “”, ``
  • null
  • undefined
  • NaN
truthy 값
  • true
  • {}
  • []
  • 0이 아닌 숫자
  • 비어있지 않은 문자열

src/05/Profile.jsx

export default function Profile({user,key}) {
  return (
    <>  
    <div className="flex flex-col items-center justify-center">
      <h1>{user.name}</h1>
      <img
        className="rounded-full m-10 "
        src={user.imageUrl}
        alt={'Photo of ' + user.name}
        style={{
          width: user.imageSize,
          height: user.imageSize
        }}
      />
      </div>
    </>
  );
} 

src/05/ConditionTest.jsx

import Profile from './Profile';
const user = [
  {
    id: '1',
    name: "Hedy Lamarr",
    imageUrl: "https://i.imgur.com/yXOvdOSs.jpg",
    imageSize: 120
  },
  {
    id: "2",
    name: "placehold",
    imageUrl: "https://placehold.co/800",
    imageSize: 120
  }
];

export default function ConditionTest() {
  return (
    <>
      {user.map(
        (userInfo) =>
          userInfo.id && <Profile user={userInfo} key={userInfo.id} />
      )}
    </>
  );
}