JSX: JavaScript XML
JSX(JavaScript XML)는 React에서만 사용하는 JavaScript 확장 문법입니다. JSX를 사용하면 JavaScript 코드 안에 HTML과 유사한 코드를 작성할 수 있습니다. 즉, JSX는 React 컴포넌트를 만들 때 UI를 정의하는데 사용합니다.
JavaScript로 UI 표현
`React.createElement`를 사용하여 React 요소를 생성할 수 있습니다.
아래 코드는 type: h1이고, props: {className: 'hello'} 을 갖고, 자식: 'Hello, React!' 문자열을 갖는 React 요소를 생성합니다.
// createElement(type, props, ...children)
const element = React.createElement(
'h1',
{ className: 'hello' },
'Hello, React!'
);
리액트는 가상 DOM 방식을 통해서 화면에 렌더링해주기 때문에, 보통 HTML을 파싱하여 화면에 보여주지 않습니다.
때문에 React.createElement를 사용하여 엘리먼트를 생성하고, 이 엘리먼트를 ReactDOM.render 함수를 사용해서 실제 웹 브라우저에 화면을 그려줍니다.
하지만 UI를 만들때 마다 React.createElement를 사용하게 되면, 코드는 복잡해지고 가독성도 떨어지게 됩니다. 때문에 React를 사용하는 대부분의 사람들은 JS 안에서 UI를 작업할 때 JSX를 사용합니다.
JSX로 UI 표현
JSX를 사용하면 HTML과 유사한 문법으로 React 요소를 작성할 수 있어, 코드가 더 읽기 쉽고 직관적입니다.
const element = <h1 className="hello">Hello, React!</h1>;
JSX를 사용하면 컴파일 시 바벨(Babel)이 React.createElement로 변환하여 사용합니다.
JSX 예제 코드
JSX를 사용하지 않은 React 컴포넌트
import React from 'react';
import ReactDOM from 'react-dom';
function Hello(props) {
return React.createElement(
'h1',
{ className: 'hello' },
`Hello, ${props.name}`
);
}
ReactDOM.render(
React.createElement(Hello, { name: 'React' }, null),
document.getElementById('root')
);
JSX를 사용한 React 컴포넌트
import React from 'react';
import ReactDOM from 'react-dom';
function Hello(props) {
return <h1 className="hello">Hello, {props.name}</h1>;
}
ReactDOM.render(
<Hello name="React" />,
document.getElementById('root')
);
JSX 주의사항
1. JSX 표현식은 단일 루트 요소로 감싸야 합니다. 여러 요소를 반환하려면 `<div>`나 `<Fragment>`로 감싸야 합니다.
// 오류 발생
return (
<h1>Hello</h1>
<h2>World</h2>
);
// 올바른 사용
return (
<div>
<h1>Hello</h1>
<h2>World</h2>
</div>
);
// 또는 Fragment 사용
return (
<>
<h1>Hello</h1>
<h2>World</h2>
</>
);
2. JSX안에서는 JavaScript 표현식을 사용할 수 있지만, 문(statement)은 사용할 수 없습니다.
// 올바른 사용
return <h1>{1 + 2}</h1>;
// 오류 발생
return <h1>{if (true) { return 1; }}</h1>;
3. JSX에서 CSS 클래스를 지정할 때는 `class`가 아닌 `className`을 사용해야 합니다.
return <div className="my-class">Content</div>;
'Front-End > React' 카테고리의 다른 글
React Hooks 이해하기 (0) | 2024.05.23 |
---|---|
React Props와 State를 통한 데이터 관리 (0) | 2024.05.22 |
React 기본 구조 완벽 정리, SPA(Single Page Application) 이해하기 (1) | 2024.05.22 |
React 리액트란? 기본 개념, 컴포넌트, 가상 DOM, 설치까지 한눈에 보기 (0) | 2024.05.21 |