KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (487) N
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (432) N
      • 백준 (187)
      • Programmers (105) N
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • LeetCode
  • recursion
  • string
  • 백준
  • Level 1
  • C
  • Level1
  • 그래프
  • 다이나믹 프로그래밍
  • C++
  • 정렬
  • tree
  • js
  • 수학
  • programmers
  • Level 0
  • 문자열
  • Level 2
  • codeup
  • 제코베 JS 100제

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun
React 공식문서 (번역, 공부)/Describing the UI

Describing the UI

React 공식문서 (번역, 공부)/Describing the UI

Describing the UI

2023. 5. 7. 02:13

UI 설명

React는 UI 렌더링을 위한 JavaScript 라이브러리이다. React를 사용하면 재사용 가능하고 중첩 가능한 구성 요소로 결합할 수 있다.

 

 

JSX로 마크업 작성하기

일단 JSX에 대해 알아볼 필요가 있다. JSX는 HTML과 비슷하게 생겼지만, JavaScript를 확장한 문법이다.

const name = 'Minjun Kim';
const element = <h1>Hello, {name}</h1>

 

위와 같이 HTML 태그로 이루어진 element 자체를 변수로 선언하여 할당할 수 있다.  JSX의 중괄호 안에는 모든 JavaScript 표현식이 들어갈 수 있다.

 

따라서, 예를 들어 어떤 태그에 속성을 동적으로 추가하고 싶을 경우 JSX를 활용할 수 있다. 또 JSX를 활용함으로써 많은 속성을 넣게 되었을 때 지저분해 보일 수 있는 단점을 따로 빼서 JSX 변수로 삽입하여 깔끔하게 유지할 수 있다.

 

조건부 렌더링

JSX를 가장 많이 활용하게 되는 경우가 이 조건부 렌더링과 반복문을 사용할 때가 아닌가 싶다. React 에서는 if문, &&, ? : 연산자와 같은 JavaScript 구문을 사용하여 JSX를 조건부로 렌더링할 수 있다.

 

보통 다음 예시와 같이 && 연산자를 이용한 조건부 렌더링을 많이 사용하고, 사용했던것 같다.

 

 

위의 개념과 함께 '단축 평가'라는 개념도 함께 알고가면 좋지 않을까 싶다. 위 코드에서도 보면 isPacked라는 변수는 boolean 값으로 true 아니면 false 라는 값을 가진다. 상단의 Item 컴포넌트에서 보면, isPacked를 prop으로 받아서 {isPacked && '✔'} 라는 JSX 구문을 사용한다. 이것이 단축 평가이다.

 

위의 단축 평가를 if문으로 풀어서 사용한다면 아래와 같을 것이다.

 

// 단축 평가
function Item({ name, isPacked }) {
  return (
    <li className="item">
      {name} {isPacked && '✔'} // isPacked가 true라면 '✔' 표시
    </li>
  );
}

// 삼항 연산자
function Item({ name, isPacked }) {
  return (
    <li className="item">
      {name} {isPacked ? '✔' : ''}
    </li>
  );
}

// if 조건문
function Item({ name, isPacked }) {
  let check = '';
  
  if(isPacked === true) {
    check = '✔'
  }  
  
  return (
    <li className="item">
      {name} {check}
    </li>
  );
}​

위의 3가지 방법 모두 같은 결과를 도출한다. 하지만 단축 평가를 이용했을 때 훨씬 간결한 것을 볼 수 있다. 실제로도 저 방법을 많이 사용한다.

 

그럼 저 단축평가는 어떤 식으로 동작되어 결과를 나타낼까?

일단 조건문을 이용해서 boolean 값 사이의 비교연산을 이용한 예시를 보자. (그 전에! 기본적인 것부터 짚고 넘어가보자면 if문은 if문의 조건식이 true일 때 if문 안의 코드가 실행된다.)

/* 
  a && b가 true임을 판단하려면 a와 b가 모두 true가 되어야 한다.
*/

// 앞의 값이 true 지만 뒤의 값에 따라서 결과가 바뀌므로 뒤의 값까지 봐야한다.
if(true && true) { // true
  ...
}
// 위와 같은 이유
if(true && false) { // false
  ...
}
// 앞의 값이 false 라서 뒤의 값에 상관없이 어차피 false이다.
// 따라서 굳이 뒤의 값을 검사할 필요가 없다.
if(false && false) { // false
  ...
}
// 위와 같은 이유
if(false && true) { // false
  ... 
}

/* 
  a || b가 true임을 판단하려면 두 가지 경우만 생각하면 된다
  a가 true일 경우, b의 값에 상관없이 어차피 true이기 때문에 굳이 검사할 필요가 없다.
  a가 false일 경우, b의 값에 따라서 값이 결정되므로 b도 검사해야 한다.
*/

// 앞의 값이 true이기 때문에 뒤의 값에 상관없이 이 조건식은 true이다.
if(true || true) { // true
  ...
}
// 위와 같은 이유
if(true || false) { // true
  ...
}
// 앞의 값이 false이기 때문에 뒤의 값을 확인해야 한다.
if(false || false) { // false
  ...
}
// 위와 같은 이유
if(false || true) { // true
  ... 
}

 

위를 참고해서 {isPacked && '✔'} 가 어떻게 실행되는지 살펴보자.

 

일단 isPacked가 true일 경우를 생각해보자. 그렇다면 뒤의 값에 따라서 조건의 결과가 달라지므로 && 뒤의 '✔'도 검사해야 한다.(일반적으로 nullish한 값이 아니고, 값이 존재한다면 truely한 값이다) 따라서 isPacked가 true일 경우에는 '✔'가 화면에 렌더링 되는것이다.

 

isPacked가 false일 경우를 생각해보자. && 연산자의 앞에 있는 isPacked가 false이다. 그러면 뒤의 값에 상관없이 이미 이 조건의 결과는 false이다. 따라서 && 연산자의 뒤의 값을 볼 필요가 없는것이다. 그러므로 '✔'까지 보지 않으므로 화면엔 출력되지 않는다.

 

위 처럼 if문과 삼항 연산자로도 조건부 렌더링이 가능하지만 이해한다면 JSX를 사용해 단축 평가로 깔끔하고 짧게 조건부 렌더링을 수행할 수 있다.

 

 

리스트 렌더링

위의 조건부 렌더링과 함께 JSX를 많이 이용하게 될 때가 리스트를 렌더링할 때이다. 위에서 말했지만, JSX의 중괄호 안에는 어떠한 JavaScript 표현식이 들어갈 수 있다. 따라서 .map() 을 이용해서 배열의 값으로 리스트를 렌더링할 때 쓰인다.

 

배열에 들어있는 값들로 태그에 속성을 지정해 줄 수 있다. 이때 key 속성을 사용하는데, 반복문을 이용해서 element를 여러개 생성할 경우 DOM Tree 에서 같은 단계, 혹은 깊이에 형제 element 들이 생길 것이다. 이 때, 각 형제 요소 간에 구분할 수 있기 위해 key 속성을 반드시 넣어야 하고, 다른 형제 요소와 key 값이 중복되면 안된다. key값 외에도 다른 속성에 배열의 값을 삽입할 때 JSX 구문을 사용하는 것을 볼 수 있다.

저작자표시 (새창열림)

'React 공식문서 (번역, 공부) > Describing the UI' 카테고리의 다른 글

JavaScript in JSX with Curly Braces  (2) 2023.05.08
Writing Markup with JSX  (0) 2023.05.07
Importing and Exporting Components  (0) 2023.05.07
Your First Component  (0) 2023.05.07
  • UI 설명
  • JSX로 마크업 작성하기
  • 조건부 렌더링
  • 리스트 렌더링
'React 공식문서 (번역, 공부)/Describing the UI' 카테고리의 다른 글
  • JavaScript in JSX with Curly Braces
  • Writing Markup with JSX
  • Importing and Exporting Components
  • Your First Component
KimMinJun
KimMinJun
Coding NoteKimMinJun 님의 블로그입니다.

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.