'if (cardListCheck.length === 0)'라는 조건을 통해 카드가 하나도 없으면 +가 있는 상자를 보여주며 카드가 하나라도 있을 경우 CardPortfolio 컴포넌트를 보여주게 했다.
const CardAdd = () => {
const cardListCheck = useSelector((state) => state.cards.cardList);
const cardList = useSelector((state) => state.cards);
if (cardListCheck.length === 0) {
return (
<Grid>
<Btn
onClick={() => {
history.push('/write');
}}
>
프로젝트 추가하기
</Btn>
<Grid>
+
</Grid>
</Grid>
);
}
return (
<Grid>
<Btn
onClick={() => {
history.push('/write');
}}
>
프로젝트 추가하기
</Btn>
{cardList.allIds.map((cardId) => {
return (
<Grid key={cardId}>
<CardPortfolio cardId={cardId} />
</Grid>
);
})}
</Grid>
);
};
export default CardAdd;
아래 이미지를 통해 조건에 맞게 화면 변화가 잘 되는걸 확인 할 수 있다.
변수를 선언하고 if 문을 사용하는 것은 조건부로 컴포넌트를 렌더링하는 훌륭한 방법이지만, 원한다면 더 짧은 구문을 사용할 수도 있습니다. JSX에 조건을 인라인으로 넣는 몇가지 방법을 소개합니다.
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
<h1>Hello!</h1>
{unreadMessages.length > 0 &&
<h2>
You have {unreadMessages.length} unread messages.
</h2>
}
</div>
);
}
const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(
<Mailbox unreadMessages={messages} />,
document.getElementById('root')
);
// 예시1.
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
</div>
);
}
더 큰 표현을 위해 사용할 수도 있지만 덜 명백하게 보입니다.
// 예시2.
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
{isLoggedIn ? (
<LogoutButton onClick={this.handleLogoutClick} />
) : (
<LoginButton onClick={this.handleLoginClick} />
)}
</div>
);
}
자바스크립트에서와 마찬가지로 당신과 당신의 팀이 더 읽기 쉽다고 생각하는 것을 바탕으로 적절한 스타일을 선택하면 됩니다. 또한 조건이 너무 복잡해질 때마다 컴포넌트를 추출 하면 좋습니다.
P.S. 참고자료 : https://reactjs-kr.firebaseapp.com/docs/conditional-rendering.html