Search
Duplicate
📒

[React 완벽 가이드] 02-2. 리액트 조건, 반복 렌더링 -List, Key, if

상태
완료
수업
React 완벽 가이드
주제
4 more properties
참고

리액트 분기, 반복, 조건 렌더링

List - map()을 통한 여러 컴포넌트 생성

NOTE
// function을 통한 컴포넌트 생성 function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((number) => <li key={number.toString()}> {number} </li> ); return ( <ul>{listItems}</ul> // 컴포넌트 반환 ); } // 실제 리액트 렌더링 const numbers = [1, 2, 3, 4, 5]; const root = ReactDOM.createRoot(document.getElementById('root')); root.render(<NumberList numbers={numbers} />);
JavaScript
복사
React 컴포넌트 map()예시
실행결과

Key - 식별요소

NOTE
// function(컴포넌트) - 개별 요소 function ListItem(props) { return <li>{props.value}</li>; } // function(컴포넌트) - 리스트 function NumberList(props) { const numbers = props.numbers; // 1~5 const listItems = numbers.map((number) => // key값 사용 <ListItem key={number.toString()} value={number} /> ); return ( <ul> {listItems} </ul> ); } // 실제 리액트 렌더링 const numbers = [1, 2, 3, 4, 5]; const root = ReactDOM.createRoot(document.getElementById('root')); root.render(<NumberList numbers={numbers} />);
JavaScript
복사
Key 선택의 가장 좋은 방법은 항목별 고유한 값을 사용하는 것
key는 엘리먼트에 안정적인 고유성 부여를 위해 배열 내부 엘리먼트에 지정해야 함
지정하지 않으면 기본적으로 인덱스를 key로 사용한다
[ 참고]
항목의 순서가 바뀔 수 있는 경우 key에 인덱스를 사용하는걸 권장하지 않는다
이로 인해 성능이 저하되거나, 컴포넌트 state와 관련된 문제가 발생할 수 있음!
key는 배열 안의 요소에서만 고유값이면 된다 (전체 범위에서 고유 값일 필요는 없음)
ex) ListItem 컴포넌트를 추출
ListItem안에 있는 <li> 엘리먼트가 아니라, 배열의 <ListItem /> 엘리먼트 에서 key 값을 가져야 한다

조건부 렌더링 - if

NOTE
React에서는 원하는 동작을 캡슐화하는 컴포넌트를 만들 수 있다 이렇게 하면 애플리케이션 상태에 따라서 컴포넌트 몇 개 만을 렌더링 할 수 있다!
function UserGreeting(props) { // 컴포넌트 1 return <h1>Welcome back!</h1>; } function GuestGreeting(props) { // 컴포넌트 2 return <h1>Please sign up.</h1>; } // 조건에 따른 컴포넌트 출력 (if) function GreetingIf(props) { const isLoggedIn = props.isLoggedIn; if (isLoggedIn) { return <UserGreeting />; } return <GuestGreeting />; } // 실제 리액트 렌더링 const root = ReactDOM.createRoot(document.getElementById('root')); root.render(<GreetingIf isLoggedIn={false} />);
JavaScript
복사
if구문을 통한 분기처리
// 조건에 따른 컴포넌트 출력 (삼항 연산자) function GreetingIf(props) { const isLoggedIn = this.state.isLoggedIn; return ( <div> The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in. </div> ); }
JavaScript
복사
삼항연산자를 통한 분기처리
// 조건에 따른 컴포넌트 출력 (&&, || 사용) 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']; const root = ReactDOM.createRoot(document.getElementById('root')); root.render(<Mailbox unreadMessages={messages} />);
JavaScript
복사
논리 연산자 && 사용코드
function WarningBanner(props) { if (!props.warn) { return null; } return ( <div className="warning"> Warning! </div> ); }
JavaScript
복사
컴포넌트 렌더링 막는 코드(렌더링 결과를 출력하는 대신 null을 반환하면 된다!)