JSX란 무엇인가?
JSX는 JavaScript에서 XML과 유사한 구문을 사용하여 React 컴포넌트를 작성하는 방식입니다. JSX는 JavaScript와 HTML의 장점을 결합하여 UI를 보다 직관적으로 구성할 수 있게 해줍니다. React는 이를 JavaScript로 변환하여 렌더링합니다.
1. JSXElement
JSXElement는 HTML 태그와 비슷한 구조를 가지며, React 컴포넌트에서 화면 요소를 표현하는 데 사용됩니다. 커스텀 컴포넌트를 정의할 때는 이름이 대문자로 시작해야 인식됩니다.
- JSXOpeningElement: 컴포넌트의 시작 태그 <JSXElement>
- JSXClosingElement: 컴포넌트의 종료 태그 </JSXElement>
- JSXSelfClosingElement: 내용 없이 닫히는 태그 <JSXElement />
- JSXFragment: 여러 컴포넌트를 묶어 반환할 때 사용 <> </>
const element = <div>Hello</div>; // JSXOpeningElement와 JSXClosingElement
const selfClosing = <img src="image.jpg" />; // JSXSelfClosingElement
2. JSXAttributes
JSXElement는 HTML 태그처럼 속성을 가질 수 있습니다. 속성 값은 문자열, JavaScript 표현식 또는 다른 JSXElement로 설정할 수 있습니다.
- JSXAttribute: key={value} 형태로 속성을 설정합니다.
- JSXSpreadAttribute: 객체의 속성을 펼쳐서 여러 속성을 한 번에 적용할 수 있습니다. {...props} 형태로 사용됩니다.
const inputElement = <input type="text" placeholder="Enter text" />;
const buttonProps = { type: 'submit', className: 'btn' };
const submitButton = <button {...buttonProps}>Submit</button>;
3. JSXChildren
JSXElement는 자식 요소를 가질 수 있으며, 이 자식 요소들은 텍스트나 다른 JSX 요소들이 될 수 있습니다. 중괄호 {}를 사용하면 표현식을 통해 동적으로 자식을 렌더링할 수 있습니다.
- JSXText: "simple text"와 같이 일반 텍스트로 표시됩니다.
- JSXChildExpression: 중괄호 {} 안에 표현식을 사용하여 조건부로 렌더링을 제어할 수 있습니다.
const elementWithChildren = (
<div>
<h1>Hello, World!</h1>
<p>{user.name ? user.name : "Guest"}</p> {/* JSXChildExpression */}
</div>
);
4. JSX는 어떻게 자바스크립트로 변환될까?
JSX는 Babel을 통해 JavaScript 코드로 변환됩니다. 예를 들어:
const ComponentA = <A required={true}>Hello World</A>;
var ComponentA = React.createElement(A, { required: true }, "Hello World");
즉, JSX는 React.createElement 함수를 사용해 JavaScript 객체로 변환되며, 이를 통해 React는 가상 DOM에 렌더링할 UI 구조를 만듭니다.
JSX의 장점
- 직관적인 UI 구성: HTML과 유사한 문법으로 UI를 구성하기 쉬워집니다.
- 동적인 렌더링: JavaScript 표현식을 활용하여 유연한 렌더링을 할 수 있습니다.
- 가독성: 복잡한 UI도 간결하게 작성할 수 있어 코드의 가독성을 높여줍니다.
'React' 카테고리의 다른 글
리액트에서 프로토타입이란? (1) | 2024.09.24 |
---|---|
JSX란? (0) | 2024.09.24 |
Array 프로토타입의 메소드 (0) | 2024.09.24 |
전개 구문 (0) | 2024.09.24 |
구조 분해 할당 (0) | 2024.09.24 |