웹 개발의 세계는 끊임없이 진화하고 있으며, 이러한 변화 속에서 리액트(React)는 현대 웹 개발의 핵심 요소로 자리 잡았다. 따라서, 많은 사람들이 리액트를 공부하고, 또 사용하고 있는데, 리액트를 이해하고 효과적으로 사용하기 위해서는 JSX에 대한 깊은 이해가 필수적이다.
이에, 이번 글에서 JSX가 무엇인지, 그리고 그것이 HTML과 어떻게 다른지에 대해 알아보려고자 한다.
JSX는 JavaScript XML의 약자로, 자바스크립트의 확장 문법으로써 리액트 개발에 있어 HTML 문법을 편리하게 활용할 수 있게 도와준다.
HTML과 유사한 구조를 가지고 있어 웹 개발자들에게 친숙하며, 리액트에서 UI를 쉽게 구현할 수 있게 해준다.
기본적인 구조는 아래와 같다.
import ReactDOM from 'react-dom/client';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<h1>Hello, world!</h1>,
);
JSX는 HTML과 유사한 문법을 제공하지만, 몇 가지 중요한 차이점이 있다.
HTML과 달리 JSX에서는 속성명을 카멜 케이스로 작성해야 한다.
예를 들어, onclick은 onClick으로, onfocus는 onFocus로 작성한다. 이는 자바스크립트의 네이밍 규칙을 따르기 때문이다.
<button className="btn" data-status="대기중">대기중</button>
JSX 문법도 결국은 자바스크립트 문법이기 때문에, for나 class처럼 자바스크립트의 문법에 해당하는 예약어와 똑같은 이름의 속성명은 사용할 수 없다.
그래서 HTML의 for의 경우에는 자바스크립트의 반복문 키워드 for와 겹치기 때문에 htmlFor로, HTML의 class 속성도 자바스크립트의 클래스 키워드 class와 겹치기 때문에 className으로 작성해야 한다.
<form>
<label htmlFor="name">이름</label> {/* html대신 htmlFor 사용 */}
<input id="name" className="name-input" type="text"/> {/* class 대신 className 사용 */}
</form>
JSX 문법을 활용할 때 인접한 JSX 태그는 반드시 하나의 태그로 감싸야 한다. 가장 최상위 태그는 반드시 하나만 존재해야 하기 때문이다.
하나의 요소로 감싸는 대표적 방법으로, 부모 태그를 사용하거나, Fragment를 사용할 수 있다.
<>
<p>Hi</p>
<p>React!</p>
</>
중괄호 {}를 사용하여 자바스크립트 표현식을 JSX 내에 삽입할 수 있다. 이를 통해 변수를 렌더링하거나, 함수를 호출하거나, 특정 조건에 따라 다른 내용을 렌더링할 수 있다.
추가적으로, 조건문이나 반복문은 JSX 내에서 직접적으로 사용할 수 없으나, 조건 연산자나 배열의 메소드(map, forEach 등)를 활용하여 간접적으로 구현할 수 있다.
이와 같이 자바스크립트 표현식을 사용하면 코드를 훨씬 더 가독성있고 깔끔하게 작성 가능하다.
import ReactDOM from 'react-dom/client';
const product = '갤럭시';
const model = 'S20';
const imageUrl = 'https://example.com/galaxy-s20.png'; // 예시 이미지 URL
function handleClick(e) {
alert('주문이 완료되었습니다!');
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<>
<h1>{`${product} ${model} 주문하기`}</h1>
<img src={imageUrl} alt="휴대폰 제품 사진" />
<button onClick={handleClick}>주문</button>
</>,
);
JSX는 리액트 개발에서 굉장히 중요한 역할을 한다. HTML과 유사하면서도 자바스크립트와의 통합이 용이해, 동적인 웹 애플리케이션을 효율적으로 구축할 수 있게 돕는다.
따라서, 이러한 JSX의 특징과 원리, 그리고 기본 규칙을 잘 숙지하고 활용하여 한층 수월한 리액트 개발을 수행해보자.