JSX 문법 이해하기
JSX(JavaScript XML)는 React에서 UI를 설계할 때 사용하는 JavaScript의 확장 문법입니다.
우리는 JSX를 통해 더 직관적이고 효율적으로 컴포넌트를 작성할 수 있습니다.
JSX의 개념과 필요성
JSX는 JavaScript 코드 안에 HTML과 유사한 마크업을 작성할 수 있게 해주는 문법입니다.
React에서 JSX를 사용하는 주요 이유는 다음과 같습니다.
- 가독성 : UI 구조를 시각적으로 더 쉽게 이해할 수 있습니다.
- 작성 용이성 : HTML과 유사한 구문으로 컴포넌트를 쉽게 작성할 수 있습니다.
- 유지보수성 : 마크업과 로직을 한 곳에서 관리할 수 있어 유지보수가 쉬워집니다.
HTML과 JSX의 차이점
JSX는 HTML과 유사해 보이지만, 몇 가지 중요한 차이점이 있습니다.
1. 클래스 속성 : HTML의 class
속성은 JSX에서 className
으로 사용됩니다.
// HTML
<div class="container">...</div>
// JSX
<div className="container">...</div>
2. 스타일 속성 : JSX에서는 스타일을 객체로 전달합니다.
// HTML
<div style="color: red; font-size: 16px;">Hello</div>
// JSX
<div style={{ color: 'red', fontSize: '16px' }}>Hello</div>
3. 셀프 클로징 태그 : JSX에서는 모든 태그를 명시적으로 닫아야 합니다.
// HTML
<img src="image.jpg" alt="An image">
// JSX
<img src="image.jpg" alt="An image" />
JSX에서 JavaScript 표현식 사용하기
JSX 내에서 중괄호 {}
를 사용하여 JavaScript 표현식을 삽입할 수 있습니다.
const name = 'John';
const element = <h1>Hello, {name}!</h1>;
이는 변수, 함수 호출, 연산 등 모든 유효한 JavaScript 표현식에 적용됩니다.
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Harper',
lastName: 'Perez'
};
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
);
JSX의 규칙과 제한사항
- 단일 루트 요소 : JSX 표현식은 반드시 하나의 부모 요소로 감싸져 있어야 합니다.
// 잘못된 예
const element = (
<h1>Hello</h1>
<p>World</p>
);
// 올바른 예
const element = (
<div>
<h1>Hello</h1>
<p>World</p>
</div>
);
- JavaScript 예약어 :
class
,for
등의 예약어 대신className
,htmlFor
를 사용해야 합니다. - 속성 이름 : 속성 이름은 camelCase로 작성합니다 (예 :
onClick
,tabIndex
). - 조건부 렌더링 : JSX 내에서 조건부 렌더링을 위해 삼항 연산자나 논리 연산자를 사용할 수 있습니다.
const element = (
<div>
{isLoggedIn ? (
<UserGreeting />
) : (
<GuestGreeting />
)}
</div>
);
JSX가 React 요소로 변환되는 과정
JSX는 실제로 React.createElement()
함수 호출로 변환됩니다.
이 코드는
const element = <h1 className="greeting">Hello, world!</h1>;
다음과 같이 변환됩니다.
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
이 과정은 Babel과 같은 도구에 의해 자동으로 수행되며, 개발자가 직접 신경 쓸 필요는 없습니다.
JSX 사용 예제
다음은 JSX를 사용한 간단한 React 컴포넌트의 예입니다.
function Welcome(props) {
return (
<div className="welcome-container">
<h1>Welcome, {props.name}!</h1>
<p>It's {new Date().toLocaleDateString()} today.</p>
{props.isSpecialDay && (
<span className="special-message">Happy special day!</span>
)}
</div>
);
}
이 예제에서 우리는 다음과 같은 JSX 문법을 사용했습니다.
className
을 사용하여 CSS 클래스를 지정했습니다.- 중괄호
{}
를 사용하여 JavaScript 표현식 (props와 날짜)을 삽입했습니다. - 조건부 렌더링을 위해
&&
연산자를 사용했습니다.
JSX는 React 개발의 중심이 되는 문법으로, UI 구조를 직관적으로 표현할 수 있게 해줍니다.
HTML과 유사하면서도 JavaScript의 강력함을 활용할 수 있어, 복잡한 UI 로직을 간결하게 작성할 수 있습니다.
JSX를 통해 개발자는 마크업과 로직을 하나의 파일에서 관리할 수 있어, 컴포넌트 기반 개발의 이점을 최대한 활용할 수 있습니다.