1. 조건부로 반환하는 JSX
2. null을 사용해 조건부로 아무것도 반환하지 않기
3. 조건을 포함한 JSX
4. 조건(삼항) 연산자(? :)
5. 논리 AND 연산자(&&)
6. 변수에 조건부로 JSX 할당하기
KeyNote
if
와 return
문으로 분기 로직을 어떻게 생성하는지 확인하자.// 예시
function Item({ name, isPacked }) {
if (isPacked) {
return null;
}
return <li className="item">{name}</li>;
}
export default function PackingList() {
return (
<section>
<h1>Sally Ride's Packing List</h1>
<ul>
<Item
isPacked={true}
name="Space suit"
/>
<Item
isPacked={true}
name="Helmet with a golden leaf"
/>
<Item
isPacked={false}
name="Photo of Tam"
/>
</ul>
</section>
);
}
className
을 변경하려면 코드의 두 곳에서 변경해야 한다.// 예시
return (
<li className="item">
{isPacked ? name + ' ✔' : name}
</li>
);
isPacked가 참이면 (?) name + ' ✔'를 렌더링하고, 그렇지 않으면 (:) name
을 렌더링하라” 라고 읽을 수 있다.// 예시
return (
<li className="item">
{name} {isPacked && '✔'}
</li>
);
isPacked
이면 (&&) 체크 표시를 렌더링하고, 그렇지 않으면 아무것도 렌더링하지 않는다.” 로 읽을 수 있다.true
이면 오른쪽(이 경우 체크 표시)의 값을 반환한다.false
이면 표현식 전체가 false
가 된다.false
를 null
이나 undefined
와 마찬가지로 JSX 트리상의 “구멍”으로 간주하고, 그 자리에 아무것도 렌더링하지 않는다.주의
- &&의 왼쪽에 숫자를 넣으면 안된다.
-조건을 테스트하기 위해, JavaScript는 왼쪽을 자동으로 불리언으로 변환한다.
그러나 왼쪽이 0이면 전체 표현식이 해당 값(0)을 가져오고, React는 기꺼이 빈 값 대신 0을 렌더링한다.
- 예를 들어, 흔히 하는 실수 중 하나는
messageCount && <p>New messages</p>
와 같은 코드를 작성하는 것이다.
messageCount
가 0일 때 아무것도 렌더링하지 않는다고 생각하기 쉽지만, 실제로는 0 자체를 렌더링한다.- 이 문제를 해결하려면 왼쪽을 아래 예제와 같이 불리언으로 만들면 된다.
messageCount > 0 && <p>New messages</p>
// 예시
function Item({ name, isPacked }) {
let itemContent = name;
if (isPacked) {
itemContent = name + " ✔";
}
return (
<li className="item">
{itemContent}
</li>
);
}
export default function PackingList() {
return (
<section>
<h1>Sally Ride's Packing List</h1>
<ul>
<Item
isPacked={true}
name="Space suit"
/>
<Item
isPacked={true}
name="Helmet with a golden leaf"
/>
<Item
isPacked={false}
name="Photo of Tam"
/>
</ul>
</section>
);
}
이 스타일은 가장 장황하지만 가장 유연하기도 하고, 텍스트뿐만 아니라 임의의 JSX에서도 작동한다.
JavaScript에 익숙하지 않다면 처음에는 이 다양한 스타일이 복잡해 보일 수 있다.
하지만 이 스타일들을 익히면 React 컴포넌트뿐 아니라 모든 JavaScript 코드를 읽고 작성하는 데 도움이 크게 된다.
우선 선호하는 스타일을 선택한 다음, 다른 스타일이 어떻게 작동하는지 잊어버렸다면 이 레퍼런스를 다시 참조하자.
if
문으로 조건부로 JSX 표현식을 반환할 수 있다.{cond ? <A /> : <B />}
는 “cond가 있으면 <A />
를 렌더링하고, 그렇지 않으면 <B />
를 렌더링하라”를 의미한다.{cond && <A />}
는 ”cond가 있으면 <A />
를 렌더링하고, 그렇지 않으면 아무것도 렌더링하지 말라”를 의미한다.if
를 선호한다면 굳이 사용하지 않아도 된다.