이번 편에서는 JSX를 소개하고 HTML과 어떤 부분이 다른지 알아보겠습니다.
여기에서 알 수 있는 것 외에도 조금 더 많은 설명이 필요하지만, 그것은 강좌를 진행하면서 필요한 부분에서 추가적으로 안내하겠습니다. 한 번에 많이 아는 것 보다는 조금씩 확실하게 아는 것이 더 쉽고 오래 기억에 남습니다.
<main>
<h1>Welcome to React</h1>
</main>
React.createElement('main', null,
React.createElement('h1', null,
'Welcome to React'
)
);
예시에서 보듯이 HTML과 비슷하게 생긴 JSX 문법은 2번째의 JavaScript 코드와 같은 형태로 바뀝니다. 이번 예시에서는 HTML과 완전히 똑같이 생겼지만, 다음에서 소개하는 것을 모두 보고 나면 비슷하다고 하는 것을 이해할 수 있습니다.
지금은 'JavaScript로 바뀌는구나' 하는 정도만 이해하면 충분합니다. 자세한 원리 등은 React를 능숙하게 사용할 수 있을 때에 알아봐도 늦지 않습니다.
<div id='UserProfile'>user</div>
<div id={1}>number</div>
<div id={false}>boolean</div>
JSX는 HTML을 JavaScript 코드에서도 유연하게 표현하기 위한 것이기 때문에, 당연히 요소도 표현할 수도 있습니다.
따옴표로 감싼 문자열string은 HTML처럼 바로 사용할 수 있지만, 숫자number, 진리값boolean 등은 JSX를 JavaScript로 바꾸면서 발생하는 모호함을 해결하기 위해서 중괄호({}
)를 앞뒤로 감싼 형태로 작성합니다.
HTML과 JSX의 큰 차이점 중 하나입니다.
<div id={'UserProfile'}>user</div>
문자열은 사실 이렇게도 표현을 할 수 있습니다.
JSX는 꼭 지켜야 할 몇몇 제한이 있습니다. 어렵지는 않으니 알아만 두면 충분합니다.
JSX를 사용하는 스크립트 파일은 상단에서 React 라이브러리를 꼭 불러와야 합니다.
import React from 'react'
깜빡하면 무시무시한 에러 화면을 경험할 수 있습니다.
열어놓은 태그는 꼭 닫아야 합니다.
<main>
<main></main>
1번째 코드는 에러가 발생하며, 2번째와 같이 작성할 수 있습니다.
최상위 태그는 꼭 1개여야 합니다.
<header>
<h1>welcome to header</h1>
</header>
<main>
<h1>welcome to main</h1>
</main>
<Fragment>
<header>
<h1>welcome to header</h1>
</header>
<main>
<h1>welcome to main</h1>
</main>
</Fragment>
1번째 코드는 에러가 발생하며, 2번째와 같이 작성할 수 있습니다.
Fragment 태그는 이 편 마지막 부분에서 소개하겠습니다.
<main></main>
<main />
태그 안에 들어가는 것이 없는 경우에는 바로 닫을 수 있습니다.
1번째와 2번째는 같은 결과를 보여줍니다.
<Fragment>
<header>
<h1>welcome to header</h1>
</header>
<main>
<h1>welcome to main</h1>
</main>
</Fragment>
<header>
<h1>welcome to header</h1>
</header>
<main>
<h1>welcome to main</h1>
</main>
제한의 2번째에서 보였듯이, React에는 Fragment라는 '빈 태그'가 있습니다.
1번째의 실행 결과는 2번째와 같은 형태로 나타납니다.
이 태그는 '최상위 태그는 꼭 1개여야 한다' 는 React의 JSX 제한을 해결하기 위해서 주로 활용합니다.
<>
<header>
<h1>welcome to header</h1>
</header>
<main>
<h1>welcome to main</h1>
</main>
</>
Fragment 태그는 이렇게 생략한 형태로도 작성을 할 수 있으며, 코드를 읽기에도 편리합니다.
HTML에서는 볼 수 없는 그런 태그인 만큼, JSX와 HTML의 큰 차이점 중 하나입니다.
JSX를 사용하는 스크립트 파일은 .jsx
를 사용하는 것이 맞지만, .js
로 하더라도 문제는 없습니다.
.tsx
로 해야 하며, .ts
에서는 JSX 문법을 사용할 수 없습니다.최상위 태그가 꼭 1개여야 하는 React의 JSX 제한은 자연스러운 동작 및 최적화와 관련이 있는데, 이것을 설명하기 위해서는 먼저 알아두어야 할 것이 많습니다. 알고 싶은 분은 UI 런타임으로서의 React을 읽어 보는 것이 좋습니다.
영어로는 self-closing tag
이며, 보통은 '스스로 닫는 태그' 라고 번역하지만 와닿지 않을 수 있다고 생각해서 임의의 이름으로 했습니다.
좋아요와 댓글 감사합니다.
오탈자, 질문 등은 언제든지 댓글로 달아주세요!