빵 입니다.

조건부 렌더링 본문

프론트엔드/React

조건부 렌더링

bread-gee 2023. 12. 5. 22:21

📌 삼항연산자 사용하여 조건부 렌더링

조건 ? 참일 경우 실행할 내용 : 거짓일 경우 실행할 내용;

{
	// 조건
	itemList.length === 0 ? (
		// 참일 경우 실행할 내용
		<p className='no-data'>목록이 없습니다.</p>
	) : (
		// 거짓일 경우 실행할 내용
		itemList.map((item) => (
			<item key={item.id} title={item.title} />
		))
	)
}

 

 

 

📌 AND 연산자(&&) 사용하여 조건부 렌더링

두 조건 모두 참인 경우 참

조건을 만족할 때만 내용을 보여 주고, 만족하지 않을 때 아무것도 랜더링되지 않아야 하는 상황에서 사용한다.

{
	itemList.length === 0 && (
		<p className='no-data'>목록이 없습니다.</p>
	)
}
{
	itemList.length > 0 &&
		itemList.map((item) => (
			<item key={item.id} title={item.title} />
	))
}
  • 조건이 참(Truthy)일 때, 오른쪽의 표현식이 렌더링된다.
  • 조건이 거짓(Falsy)일 때, 오른쪽의 표현식은 평가되지 않고 false로 간주되어 렌더링되지 않는다.

🔥 리액트는 조건부 렌더링에서 false, undefined, null, 0, NaN과 같은 Falsy한 값들은 렌더링하지 않는다. 

 

 

📌 자바스크립트 변수를 사용하여 조건부 렌더링

// 리스트가 없을 경우로 초기화
let listContent = <p>목록이 없습니다.</p>;

// 리스트가 있을 경우 렌더링
if (itemList.length > 0) {
	listContent = itemList.map((item) => (
		<item key={item.id} title={item.title} />
	));
}

return (
	{listContent}
)
  • if (itemList.length > 0)을 사용하여 itemList 배열의 길이를 확인한다.
  • 배열이 비어 있지 않으면 listContent 초기값을 덮어써서 <item />를 렌더링한다.
  • 배열이 비어 있으면 <item />를 무시하고, 초기값 <p>목록이 없습니다.</p>를 렌더링 한다.

 

 

📌 컴포넌트를 사용하여 조건부 렌더링

조건부 렌더링 UI가 담긴 컴포넌트에 데이터를 전달한다.

if (props.items.length === 0) {
	return <p>목록이 없습니다.</p>;
}

return (
	<ul className='list'>
		{props.items.map((item) => (
			<item key={item.id} title={item.title} />
		))}
	</ul>
);
  • if (props.items.length === 0)이 true이면 <p>목록이 없습니다.</p>를 렌더링하고, 함수는 종료된다.
  • if (props.items.length === 0)이 false이면 <ul className='list'>...</ul>를 렌더링하고, 함수는 종료된다.

🔥 렌더링을 위한 로직(props.items.length === 0) 분리했고, 조건에 따라 다른 JSX코드를 반환할 있다는 이점이 있다.

Comments