JSX 활용

JSX는 JavaScript 표현식(expression) (opens new window)을 중괄호({})로 묶어 데이터를 바인딩(Binding) 한다. 쉽게 말해 HTML 코드에서 데이터를 빼내 변수에 등록한 후, 변수를 HTML 코드에 바인딩(binding)할 수 있다는 말이다.

상태가 변경되면 JSX 요소가 반환되고 반환된 요소를 렌더링 한다.

1. 데이터 바인딩 하기

Data는 곧 상태(State)가 된다. 해당 데이터를 요소 내부에 바인딩 시키는 작업을 해보자

const app = (
  <div className="app">
    <h1 className="app-title">
      <span lang="en"></span>
    </h1>
  </div>
)

위의 app의 요소 내부의 콘텐츠를 분리시키는 작업을 한다.

// Data === State
const state = {
  appClassName: 'app',
  apptitleClassName: 'app-title',
  appHeadlineContents: ['React', '앱'],
}

분리한 데이터를 요소 내부에 바인딩 할 때 아래와 같이 중괄호({}, Curly Brackets)를 사용해서 바인딩 할 수 있다. 이 방식을 사용하면 동적으로 콘텐츠 변경이 가능하다.

1-(1) 결과

데이터가 들어가는 위치 확인

2. 콘텐츠 컴파일

JSX 코드의 {}는 JavaScript 표현식의 연산된 결과 값을 처리하여 콘텐츠를 컴파일 한다. 아래의 데이터를 요소에 바인딩 해보자

{}내부에서 + 1 연산자를 사용할 수 있고 템플릿 리터럴을 사용할 수도 있다.

또는 아래와 같은 방식으로도 자바 스크립트 식을 바인딩 할 수 있다.

replace() 메서드를 사용해서 공백을 -기호로 변경할 수 있다.

\s 공백, /g 여러개를 선택

정규표현식 공부하기

단, 식이 아닌 문은 사용이 불가능하다 (오류 발생)

문을 사용했을 때 오류가 발생한다.

2-(1) 결과

2.1 정리

2.1-(1) 문자 값

2.1-(2) 숫자 값

2.1-(3) 함수 (또는 메서드) 결과 값

3. 속성 컴파일

속성 값으로 큰 따옴표("") 대신 중괄호({})로 묶어 JavaScript 표현식을 사용해 동적으로 속성에 데이터를 바인딩할 수 있다.

3-(1) 스타일 속성 (인라인)

스타일 코드를 JavaScript 객체({})로 표기하여 사용한다.

3-(2) 스타일 속성 (객체)

스타일 코드를 설정한 객체를 변수에 분리하여 처리할 수도 있다.

3-(3) 클래스 속성

CSS 클래스 속성을 React 요소에 설정하고자 한다면? JavaScript 예약어 class 대신 className을 사용해야 한다.

3-(4) 클래스 속성 (동적 처리)

동적으로 CSS 클래스 이름을 변경해야 할 경우, 아래와 같이 {}를 사용해 처리합니다.

4. 조건부 렌더링

4-(1) if 문

아래와 같은 조건문을 만들어 요소에 바인딩 할 수 있다. Math.random() 메서드를 사용해서 값이 랜덤으로 나올 수 있도록 추가적으로 설정할 수 있다.

조건문

데이터 바인딩

이때도 마찬가지로 중괄호({})를 사용해서 값을 넣어준다.

4-(2) switch 문

조건문

참고

randomCount() 함수에 사용된 나머지 연산자 (%) 가위, 바위, 보 게임을 만들 수 있다.

데이터 바인딩

인자가 전달되는 함수 그림으로 이해하기

4-(3) 3항식

4-(4) 논리 연산자

4.1 코드 정리

5. 리스트 렌더링

5-(1) 들어가기 전

리스트를 레더링하여 JSX 요소에 데이터를 바인딩 할 때 아래와 같이 배열 데이터를 순환하여 사용한다.

forEach() 메서드는 값을 반환하지 않는다.

실습 (1)

아 위에서 먼저 콘솔 패드에서 map() 메서드를 사용해서 배열 데이터를 바인딩 한 것처럼 JSX에서도 아래와 같이 배열 데이터를 요소에 바인딩 했다.

사용 방법은 이전의 데이터 바인딩 방법과 똑 같다. {} 로 묶어주고 그 안에서 map() 메서드를 사용하고 JSX 요소를 작성해서 순환되는 데이터가 어디에 들어가야 할지 설정한다.

⚠️ 오류

React에서는 리스트를 렌더링 할 때, 각 아이템을 구분 할 수 있도록 고유한 key 값을 부여해야한다. 오류를 해결하기 위해 고유한 식별자(id) 값을 설정하자

아래와 같이 indexkey 값으로 해서 각 아이템의 식별자로 만들었다. (오류 해결)

실습 (2)

실습(1)과 같은 간단한 예제 말고 복잡한 배열 데이터 바인딩 해보자 아래의 강사의 정보를 담고 있는 배열 데이터가 있다.

5-(2) 데이터 바인딩

5.1 리스트 조건부 처리

5.1-(1) 정리

배열 데이터를 순환 처리 해서 사용하도록 map()메서드를 사용하고 각 아이템을 데이터 바인딩을 한다. 그리고 리스트에는 고유한 key를 가지고 있어야만 오류가 표시되지 않는다.

6. 주의할 점

6-(1) 속성 이름은 camelCase 표기법으로 사용하기

JSX는 HTML이 아닌 JavaScript 식이다. 그래서 React DOM은 HTML 표준 속성 이름 중 일부는 그대로 이름을 사용할 수 없다. 예를 들어 classclassName으로, tabindextabIndex로 사용해야 한다. 즉, 음절이 2개 이상인 경우 camelCase로 표기하기!

6-(2) 콘텐츠가 없는 요소는 항상 닫아야 한다.

JSX는 XML 문법에 따라 콘텐츠가 없는 빈 요소(empty element)는 반드시 닫아(/>) 줘야 한다. (예: <img/>, <br/>, <area/>, <meta/>, <link/>등)

6-(3) 기본적으로 루트 요소는 하나만 사용한다.

root 요소 <div>위에 root 요소를 하나 더 생성하니 오류가 발생한다.

루트 요소를 또 추가하니 오류가 발생한다.

<div>요소로 감싸줘서 root 요소가 하나만 있을 수 있도록 해야한다. (단, 이 경우는 의미없는 요소를 사용했기 때문에 시멘틱 마크업이라고 할 수 없다.)

또는 <React.Fragment> 요소를 사용해서 랩핑할 수 있다. (단, React를 불러와야 사용할 수 있다.)

<React.Fragment><></>로 작성해줘도 적용된다. <React.Fragment>의 별칭 같은 거라고 생각면 좋다.

Last updated

Was this helpful?