Blog
JSX가 무엇인지 정리하기
서론#
React를 처음 접하면
가장 먼저 마주치는 문법이 JSX다.
HTML처럼 보이지만
JavaScript 파일 안에 그대로 들어가 있고,
자연스럽게 이렇게 받아들이게 된다.
React에서는 이렇게 쓰는 거구나
JSX는 React 전용 API처럼 보이지만,
실제로는 함수 호출로 변환되는 문법이다.
JSX의 정체#
JSX는
JavaScript Syntax Extension의 약자다.
말 그대로
JavaScript 문법을 확장한 문법이다.
중요한 점은 이거다.
JSX는 브라우저가 이해하는 문법이 아니다.
브라우저는 JSX를 직접 해석하지 못한다.
JSX는 반드시 변환 과정을 거친다.
JSX는 어떻게 동작하는가#
JSX는 빌드 과정에서
일반적인 JavaScript 코드로 변환된다.
예를 들어 다음 JSX는
const element = <h1>Hello</h1>;
빌드 이후에는
대략 이런 코드로 변환된다.
const element = React.createElement("h1", null, "Hello");
즉 JSX는
React.createElement 호출을
사람이 읽기 쉬운 형태로 작성하기 위한 문법이다.
겉보기에는 HTML과 비슷하지만,
JSX는 HTML과 다르게 동작한다.
대표적인 차이는 다음과 같다.
- class 대신 className
- for 대신 htmlFor
- 모든 태그는 반드시 닫혀야 함
- JavaScript 표현식을 {}로 직접 사용 가능
이 차이들은
JSX가 HTML이 아니라
JavaScript 표현식이라는 점에서 나온다.
JSX는 왜 필요했는가#
JSX가 등장한 이유는 단순하다.
React에서는
UI를 문자열 템플릿이 아니라
상태에 따라 변하는 구조로 다루기 때문이다.
JSX는
- UI 구조
- 데이터 바인딩
- 조건부 렌더링
을 하나의 문맥 안에서 표현할 수 있게 해준다.
JSX와 표현식#
JSX 안에서는
JavaScript **표현식(expression)**만 사용할 수 있다.
<div>{count + 1}</div>
하지만 아래와 같은 문장은 사용할 수 없다.
<div>{if (count > 0) { ... }}</div>
이 차이는 중요하다.
JSX는
"JavaScript를 쓰는 곳"이 아니라,
값으로 평가될 수 있는 표현식만 허용하는 문맥이다.
그래서 조건부 렌더링에서도
삼항 연산자나 논리 연산자가 자주 사용된다.
정리#
JSX는
HTML처럼 보이지만
HTML이 아니다.
React 전용 문법처럼 보이지만,
실제로는 JavaScript의 확장 문법이며
빌드 과정에서 함수 호출로 변환된다.
관련 게시글
8개
메모이제이션이란 무엇인가
메모이제이션이 무엇인지 개념부터 정리합니다. 계산 최적화 기법으로서의 메모이제이션이 어떤 전제에서 성립하는지, 그리고 언제 의미를 가지는지를 중심으로 설명합니다
자주 사용하는 리액트 훅 (2)
React에서 구조와 렌더링 타이밍을 다루기 시작하면서 사용하게 된 훅들을 정리합니다. useLayoutEffect, useContext, 커스텀 훅이 어떤 상황에서 유용했는지를 중심으로 기록합니다.
자주 사용하는 리액트 훅 (1)
React에서 가장 자주 사용하는 훅인 useState, useEffect, useRef를 정리합니다. 각 훅이 무엇을 위한 도구인지와 어떤 상황에서 유용한지를 중심으로 설명합니다.
props drilling이 생겼던 구조와 당시 선택
React에서 상태를 상위로 끌어올리면서 발생한 props drilling 구조를 정리합니다. 중간 컴포넌트가 props를 전달만 하게 된 문제와, 그 시점에서 Context API를 선택지로 고려하게 된 이유를 기록합니다.
리액트에서 key를 사용하는 이유
React에서 리스트를 렌더링할 때 key가 왜 필수인지 정리합니다. React의 렌더링 방식과 index를 key로 사용할 때 발생하는 문제를 중심으로, 안정적인 key를 선택하는 기준을 기록합니다.
useState로 상태를 관리하다가 불편해지기 시작한 지점
React에서 useState로 상태를 관리하던 중, 페이지 이동·새로고침·뒤로가기 상황에서 상태가 유지되지 않았던 문제를 정리합니다.
clsx 다음에 tw-merge가 필요한 이유
Tailwind CSS에서 clsx로 조건부 클래스를 합친 뒤, tw-merge로 클래스 충돌을 정리하는 이유를 정리합니다. clsx와 tw-merge를 함께 사용하는 흐름과 cn 유틸 패턴을 설명합니다.
clsx / classnames를 언제, 왜 사용하는가
Tailwind CSS를 사용하며 조건부 클래스가 늘어날 때, clsx와 classnames를 언제, 왜 사용하게 되는지 정리합니다. 문자열 기반 클래스 처리의 한계와 정리 기준을 학습 관점에서 설명합니다.