JSX

ν•™μŠ΅ ν‚€μ›Œλ“œ

  • JSXλž€?

    • Syntactic sugar

    • Reactμ—μ„œ JSXλ₯Ό μ‚¬μš©ν•˜λŠ” λͺ©μ 

  • React.createElement

    • React Element

JSX

πŸ“– JSXλž€ 무엇인가?

  • JSX is an XML-like syntax extension to ECMAScript

  • JavaScript에 XML을 μΆ”κ°€ν•˜μ—¬ ν™•μž₯된 문법

  • JavaScript XML의 μ€„μž„λ§

  • 곡식적인 μžλ°”μŠ€ν¬λ¦½νŠΈ 문법은 μ•„λ‹ˆλ‹€.

  • JSX ν•˜λ‚˜μ˜ νŒŒμΌμ— μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ HTML을 λ™μ‹œμ— μž‘μ„± ν•  수 μžˆλ‹€.

  • Reactμ—μ„œλ§Œ μ‚¬μš©λ˜λŠ”κ²Œ μ•„λ‹ˆλ©°, Vue.jsλ“± λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬μ—μ„œλ„ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

πŸ“– Syntactic sugarλŠ” 무엇인가?

  • 문법적인 섀탕

  • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ μ°¨μ›μ—μ„œ μ œκ³΅λ˜λŠ” λ…Όλ¦¬μ μœΌλ‘œ κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•˜λŠ” 것

  • μ§κ΄€μ μ΄μ§€λŠ” μ•Šμ§€λ§Œ μ½”λ“œμ˜ 양을 μ€„μ—¬μ£ΌλŠ” 것듀을 Syntactic sugar 라고 λΆ€λ₯Έλ‹€.

ES2015μ—μ„œλŠ” μ—¬λŸ¬κ°€μ§€ Syntactic sugarκ°€ μΆ”κ°€ λ˜μ—ˆλ‹€κ³  평가 λœλ‹€. 예둜 Class, 객체뢄해, spread(...)

πŸ“Œ Reactμ—μ„œ JSXλ₯Ό μ‚¬μš©ν•˜λŠ” λͺ©μ 

JSXλŠ” React.createElement(component, props, ...children)ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•œ Syntactic sugarλ‘œμ„œ μ—­ν™œ 을 ν•œλ‹€.

  • Reactμ—μ„œ JSX μ‚¬μš©μ΄ ν•„μˆ˜λŠ” μ•„λ‹ˆλ©° λΉŒλ“œ ν™˜κ²½μ—μ„œ 컴파일 섀정을 ν•˜κ³  싢지 μ•Šμ„ λ•Œ JSX 없이 Reactλ₯Ό μ‚¬μš©ν•˜λ©΄ νŽΈλ¦¬ν•˜λ‹€.

  • JSX둜 ν•  수 μžˆλŠ” λͺ¨λ“  것은 순수 JavaScriptλ‘œλ„ ν•  수 μžˆλ‹€.

πŸ€– JSX μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”κ°€? (feat.κΈ°λ³Έ κ·œμΉ™)

  • JavaScript ν‘œν˜„μ‹λ§Œμ„ {} μ€‘κ΄„ν˜Έ μ•ˆμ— λ„£μ–΄μ„œ μ‚¬μš© ν•  수 μžˆλ‹€.

  • νƒœκ·Έκ°€ κΌ­ λ‹«ν˜€μ•Ό ν•œλ‹€.

  • 1개의 μ΅œμƒμœ„μ˜ νƒœκ·Έκ°€ μ‘΄μž¬ν•΄μ•Όν•œλ‹€.

    • <></> , React.Fragement

πŸ”„ React.createElement (JSX 없이 μ‚¬μš©ν•˜λŠ” React)

  • JSXλŠ” λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„  일반적인 μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ‘œ λ³€ν™˜ν•΄μ•Ό ν•œλ‹€.

  • JSX β†’ JavaScript μ½”λ“œλ‘œ Babel을 톡해 λ³€ν™˜ ν–ˆμ„ μ‹œ React.createElement λ₯Ό 톡해 React Elementλ₯Ό 생성 ν•  수 μžˆλ‹€.

Example #1

// JSX
<p>Hello, world!</p>
// JSX을 λ³€ν™˜ν•œ JavaScript
React.createElement("p", null, "Hello, world!");
//the New JSX Transform
import { jsx as _jsx } from "react/jsx-runtime";

_jsx("p", {
  children: "Hello, world!"
});

Example #2

<Greeting name="world" />
React.createElement(Greeting, {name:"world"});
import { jsx as _jsx } from "react/jsx-runtime";

_jsx(Greeting, {
  name: "world"
});

Example #3

<Button type="submit">Send</Button>
React.createElement(Button, {type:"submit"}), "Send";
import { jsx as _jsx } from "react/jsx-runtime";

_jsx(Button, {
  type:"submit",
  children:"Send"
});

πŸ”— μ°Έκ³ 

Last updated