"매 syntactic sugar over createElement — XML-like JS expression". React 의 발명, 매 declarative UI 의 핵심. 매 <div>x</div> → jsx('div', null, 'x') 로 transpile. 2026 default 는 automatic runtime (react/jsx-runtime) — 매 import React 의 불필요.
Automatic runtime (2020+, default): <div/> → _jsx('div', null), runtime 의 자동 import.
Preserve: TS --jsx preserve — Babel 등 다른 tool 에 위임.
매 element types
Lowercase (div, span): 매 string tag, host component.
Uppercase (Foo): 매 reference, component identifier.
Member access (Lib.Btn): 매 namespaced component.
Fragment (<>...</>): 매 wrapper-less group.
매 응용
React / Preact / Solid / Qwik 의 매 component definition.
MDX — Markdown + JSX.
JSX as data (Astro, hyperscript variant).
💻 패턴
Automatic runtime (2026 default)
// tsconfig.json
{"compilerOptions":{"jsx":"react-jsx",// 매 automatic runtime
"jsxImportSource":"react"// or "preact", "@emotion/react"
}}// Component.tsx — 매 import React 의 X
exportfunctionHello({name}:{name: string}){return<h1>Hello,{name}</h1>;}
typeAsProp<CextendsReact.ElementType>={as?:C};typePolymorphicProps<CextendsReact.ElementType>=AsProp<C>&React.ComponentPropsWithoutRef<C>;functionBox<CextendsReact.ElementType='div'>({as,...rest}:PolymorphicProps<C>){constComp=as??'div';return<Comp{...rest}/>;}<Boxas="a"href="/x"/>// 매 anchor props 의 typed
<Boxas={MyButton}onClick={...}/>
언제: React/Preact/Solid component 작성, TS JSX 설정 디버깅, polymorphic API 설계.
언제 X: 매 plain HTML template (no transpile needed), 매 Vue SFC (<template> 별 syntax).
❌ 안티패턴
React import 누락 (classic runtime): 매 react-jsx 로 migrate.
lowercase component name: <myButton/> 매 host element 로 처리됨 — 매 PascalCase 강제.
key 누락 in list: reconciliation 비용 폭증.
inline function child 의 남발: render 마다 새 reference — memoized child re-render 유발.