React에서 조건부 렌더링은 특정 조건에 따라 컴포넌트를 표시하거나 숨길 때 사용
JSX 외부에서 조건에 따라 전체 컴포넌트 또는 JSX 블록을 처리할 때 유용함
import Login from "../Login";
import Logout from "../Logout";
export default function IfExample() {
const isLoggedIn = true;
if (isLoggedIn) {
return <Login />;
}
return <Logout />;
}
export default function IfExample() {
const isLoggedIn = false;
if (isLoggedIn) {
return <h2>환영합니다!</h2>;
}
return <h2>로그인이 필요합니다.</h2>;
}
JSX 내부에서 참과 거짓에 따라 다른 요소를 렌더링할 때 사용
export default function TernaryExample() {
const isLoggedIn = true;
return (
<>
<h1>{isLoggedIn ? "로그인 되었습니다" : "로그인이 필요합니다"}</h1>
</>
);
}
{isLoggedIn ? <h1>로그인 되었습니다</h1> : <h1>로그인 되지 않았습니다</h1>}
{isLoggedIn ? <Login /> : <Logout />}
<h1 style={{ color: isLoggedIn ? "red" : "blue" }}>로그인</h1>
<h1 className={`${isLoggedIn ? "text-rose-400" : "text-green-600"}`}>로그인</h1>
<h1 className={twMerge(isLoggedIn ? "text-rose-400" : "text-gray-500")}>로그인</h1>
JSX 범위 안에서 참에 따른 분기 처리를 하고 싶을 때
import Login from "../Login";
// 내가 true일 때만 렌더링하고 싶을 때 사용
// flase는 신경 안 쓰고 싶다! 하면 이렇게
export default function AndExample() {
const isLoggedIn = true;
return (
<>
{isLoggedIn && <Login />}
<h2>이 메시지는 항상 보입니다.</h2>
</>
);
}
import { twMerge } from "tailwind-merge";
export default function AndExample() {
const isLoggedIn = true;
return (
{/* 클래스네임 조건부 */}
{/* style로는 불가능 */}
<h1 className={twMerge(isLoggedIn && "text-green-600")}>
조건부 클래스 적용
</h1>
);
}
🤔 JSX 표현식에서 if문 사용 불가? 놉, IIFE(즉시실행함수)로 사용 가능
IIFE를 사용하여 JSX 표현식 내에서 if문을 사용하는 방법
export default function IIFE() {
const isLoggedIn = true;
return (
<>
{(() => {
if (isLoggedIn) {
return <h2>로그인 되었습니다</h2>;
} else {
return <h2>로그인이 필요합니다</h2>;
}
})()}
</>
);
}
💡 참고: IIFE 활용 시 JSX 표현식 내부에서도 if문 사용 가능. 단, 가독성을 위해 외부 처리나 삼항/&& 연산자 사용이 일반적임
| 방법 | 사용 상황 |
|---|---|
| if문 | JSX 외부에서 전체 블록 또는 컴포넌트를 조건부로 처리할 때 |
| 삼항 연산자 | JSX 내부에서 참과 거짓에 따라 다른 결과를 렌더링할 때 |
| && 연산자 | JSX 내부에서 ****조건이 참일 때만 특정 요소를 렌더링할 때 |