React의 조건부 렌더링은 특정 조건에 따라 구성 요소나 요소를 선택적으로 표시하는 것입니다. 고객이 로그인한 경우에만 특별 제안을 표시하거나 데이터가 로드될 때 특정 콘텐츠만 표시하도록 결정하는 것과 같습니다. React를 사용하면 조건부 렌더링이 JSX 내에서 직접 JavaScript 조건을 사용하는 것만큼 간단해집니다.
React에서 조건부 렌더링을 관리하는 몇 가지 일반적인 방법은 다음과 같습니다.
좀 더 복잡한 조건을 기반으로 무언가를 렌더링하려는 경우 JSX 외부의 if 문을 사용하면 마크업을 깔끔하게 유지할 수 있습니다.
function WelcomeMessage({ isLoggedIn }) {
let message;
//로그인 여부에 따른 메시지
if (isLoggedIn) {
message = <h1>환영합니다!</h1>;
} else {
message = <h1>로그인 해주세요.</h1>;
}
return <div>{message}</div>;
}
isLoggedIn이 true인 경우, 사용자에게 “환영합니다!”가 표시됩니다. false인 경우, '로그인 해주세요.'라는 메시지가 표시됩니다.
조건이 간단한 경우 삼항 연산자를 사용한 인라인 렌더링은 상황을 간결하게 유지합니다.
function Greeting({ isLoggedIn }) {
return (
<div>
{isLoggedIn ? <h1>환영합니다!</h1> : <h1>로그인 해주세요.</h1>}
</div>
);
}
이 코드는 if 문과 동일한 결과를 달성하지만 모두 한 줄에 포함됩니다. 간단한 참 또는 거짓 조건이 있을 때 삼항연산자는 좋은 선택지입니다.
조건이 true인 경우에만 무언가를 렌더링하려면 '&&'(AND)를 사용하여 조건이 false인 경우 렌더링을 건너뜁니다.
function Notification({ hasNotification }) {
return (
<div>
{hasNotification && <p>You have new notifications!</p>}
</div>
);
}
여기서 <p> 요소는 hasNotification이 true인 경우에만 표시됩니다. 이 트릭은 "다른" 결과가 없고 "표시 또는 숨기기" 시나리오만 있는 경우에 유용합니다.
React에서 '&&' 연산자와 삼항 연산자를 함께 사용할 수 있습니다. 이는 여러 조건을 평가하고 해당 조건에 따라 표시되는 내용을 제어하려는 경우 유용할 수 있습니다.
로그인한 사용자에게 환영 메시지를 표시하고 사용자가 아직 인증 중인 경우 로드 메시지를 표시하는 구성 요소가 있다고 가정해 보겠습니다.
function UserStatus({ isLoggedIn, isLoading }) {
return (
<div>
{isLoading ? (
<p>프로필 로딩 중...</p>
) : (
isLoggedIn && <h1>Welcome back!</h1>
)}
</div>
);
}
조건부 렌더링에 '&&' 연산자를 사용하면 예상치 못한 결과가 발생할 수 있으며, 특히 렌더링된 값이 ‘0’인 경우가 여기에 해당됩니다.
function Notification({ notifications }) {
return (
<div>
{notifications.length && <p>You have {notifications.length} new notifications!</p>}
</div>
);
}
언뜻 보면 괜찮아 보일 수도 있습니다. 그러나 notifications.length가 0인 경우 false로 평가되고 React는 아무것도 아닌 대신 0을 렌더링합니다. 이는 우리가 의도한 일이 아닙니다!
해결책: 삼항 연산자를 사용하면 더 명확해질 수 있습니다.
function Notification({ notifications }) {
return (
<div>
{notifications.length > 0 ? (
<p>You have {notifications.length} new notifications!</p>
) : null}
</div>
);
}
null을 사용하면 notifications.length가 0인 경우 아무것도 표시되지 않습니다. '0'과 같은 원치 않는 값이 표시되는 것을 방지하는 추가 보호 장치입니다.
&&의 왼쪽에 숫자를 두지 마세요. ⇒ 공식문서에는 이렇게 되어있어서 0 제외하고 다른 숫자는 되는지 궁금했는데 직접 실행해봤는데 {3 &&<p>New messages</p>}