리액트 강좌: JSX

JSX는 JavaScript XML의 약자로, JavaScript 코드와 HTML을 결합하는 문법입니다. 리액트에서 JSX는 컴포넌트를 정의할 때 주로 사용되며, UI를 작성하는 데 있어 매우 직관적이고 강력한 방법을 제공합니다. 이번 강좌에서는 JSX의 기본 개념부터 고급 기술까지 깊이 있게 다뤄보겠습니다.

JSX의 기본 개념

JSX는 다음과 같은 특징이 있습니다:

  • HTML 문법과 비슷한 구문을 사용하여 리액트 요소를 정의합니다.
  • JSX 코드는 JavaScript로 변환됩니다.
  • JavaScript 표현식을 사용할 수 있습니다.

JSX 기본 문법

JSX의 기본적인 문법은 다음과 같습니다. JSX 코드는 `` 형태로 요소를 정의하고, 중괄호 `{}`를 사용하여 JavaScript 표현식을 삽입할 수 있습니다.

<h1>Hello, JSX!</h1>
<p>JSX는 리액트의 기본적인 요소입니다.</p>

JavaScript 표현식 사용하기

JSX 내에서 JavaScript 표현식을 사용할 수 있으며, 중괄호로 감싸서 사용합니다. 예를 들어, 변수를 JSX에 사용할 수 있습니다:

const name = "리액트";
<h1>안녕하세요, {name}!</h1>

JSX의 장점

JSX를 사용함으로써 얻는 주요 장점은 다음과 같습니다:

  • 가독성: HTML과 비슷한 문법 덕분에 UI 구조를 직관적으로 이해할 수 있습니다.
  • 디버깅 용이: JSX는 개발자 도구에서 로그를 통해 쉽게 디버깅할 수 있습니다.
  • 컴포넌트 기반: 각각의 UI를 컴포넌트로 분리하여 재사용성과 유지보수성을 높일 수 있습니다.

JSX 표현식의 속성

JSX 요소에 속성을 추가할 때는 camelCase 형식을 사용해야 합니다. 예를 들어, HTML의 `class` 속성은 JSX에서 `className`으로 사용됩니다:

<div className="container">내용</div>

이벤트 처리

JSX에서 이벤트를 처리할 때는 JavaScript 표기법으로 속성을 추가합니다. 예를 들어, 클릭 이벤트를 처리하는 방법은 다음과 같습니다:

<button onClick={handleClick}>클릭하세요!</button>

JSX 사용 시 주의 사항

JSX를 사용할 때 몇 가지 주의해야 할 사항이 있습니다:

  • JSX 코드는 반드시 하나의 루트 요소를 가져야 합니다.
  • 주석은 중괄호와 `/* … */` 문법을 사용해야 합니다.
  • HTML 특수 문자를 사용할 때는 이스케이프 처리를 해야 합니다. 예: `<`는 `<`로 변환됩니다.

조건부 렌더링

JSX 내에서 조건부 렌더링은 여러 방법으로 가능합니다. 가장 일반적인 방법은 삼항 연산자를 사용하는 것입니다:

{isLoggedIn ? <LogoutButton /> : <LoginButton />}

리스트 렌더링

배열의 요소를 리스트로 렌더링 할 때는 `map()` 메서드를 사용할 수 있습니다. 이때 각 요소에는 유일한 key 속성이 필요합니다:

const items = ["사과", "바나나", "오렌지"];
const itemList = items.map(item => <li key={item}>{item}</li>);

고급 JSX 기술

Fragment 사용하기

여러 요소를 그룹화할 때는 Fragment를 사용할 수 있습니다. Fragment는 추가적인 DOM 노드를 생성하지 않으면서 여러 요소를 묶어주는 역할을 합니다:

<React.Fragment>
    <h1>제목</h1>
    <p>내용</p>
</React.Fragment>

스타일링

JSX에서 inline 스타일을 적용할 때는 객체 형태로 스타일을 정의해야 합니다:

<div style={{ color: 'blue', fontSize: '20px' }}>스타일링된 텍스트</div>

결론

JSX는 리액트 개발에서 매우 중요한 부분이며, 리액트 컴포넌트를 작성하는 데 있어 효율성과 가독성을 높여줍니다. 이번 강좌를 통해 JSX의 기초부터 고급 개념까지 자세히 살펴보았으며, 실습을 통해 직접 경험해 보기를 권장합니다. 리액트와 JSX의 조화를 통해 더욱 직관적이고 강력한 웹 애플리케이션을 개발할 수 있기를 바랍니다.