01. JSX

1. ๊ฐœ๋…: JSX๋ž€????!

  • XML์ฒ˜๋Ÿผ ์ƒ๊ธด,

  • JS๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์ด๋‹ค.

  • React์˜ ๋ถ€์‚ฐ๋ฌผ

  • ๊ผญ React์—์„œ๋งŒ ์“ฐ๋Š” ๊ฒƒ์€ ์•„๋‹˜ Vue JS์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋ณต์žกํ•œ ๊ฒƒ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

    • ๋‹ค๋งŒ React์ž์ฒด๊ฐ€ ์ž˜๋‚˜๊ฐ€๋ฉด์„œ ํ•œ ๋ชธ์ฒ˜๋Ÿผ ์—ฌ๊ฒจ์ง€๊ณ  ์žˆ๋‹ค.

    • (VSC๊ฐ€ ์•„ํ†ฐ์˜ ๋ถ€์‚ฐ๋ฌผ์ด์—ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ)

  • ์ผ์ข…์˜ Syntax Sugar์ž„

  • html์„ ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ๊ณ , JS์ฝ”๋“œ์™€ 1:1๋กœ ๋งค์นญ๋œ๋‹ค.

    (
      // ์•ˆ์—๋Š” <> html ์ฝ”๋“œ์ธ๋ฐ
      { /*๋ฅผ ์“ฐ๋จผ ์ด ์•ˆ์—๋Š” JS๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.*/}
    )

2. ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

https://babeljs.io/repl ์—์„œ ์˜ˆ์‹œ๋กœ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์ข‹๋‹ค.

  • ์™ผํŽธ์—์„œ Presets react๋ฅผ ์ฒดํฌํ•˜๊ฑฐ๋‚˜

  • Add Plugin ์—์„œ react-jsx๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ @babel/plugin-transform-react-jsx๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด JSX๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ++) /* @jsx ์–ด์ฉŒ๊ตฌ~ */ ๋ผ๋Š” ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋ฉด React.createElement ๋ถ€๋ถ„์ด ์–ด์ฉŒ๊ตฌ~ํ•จ์ˆ˜๋กœ ๋Œ€์ฒด๋œ๋‹ค!

Example #1

JSX ์ฝ”๋“œ

JS๋กœ ๋ณ€ํ™˜

Example #2

JSX ์ฝ”๋“œ

JS๋กœ ๋ณ€ํ™˜

JSX automatic runtime์œผ๋กœ ์„ค์ •์„ ๋ฐ”๊พธ๋ฉด

์ด๋ ‡๊ฒŒ ๋ฐ”๋€Œ๋Š”๋ฐ ์ด๊ฒŒ์š”์ƒˆ JSX์˜ ๋ฐฉ์‹์ด๊ธด ํ•จ

JSX๋กœ ์“ธ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์€ JS๋กœ ๋งŒ๋“ค์–ด์ค„์ˆ˜ ์žˆ๋‹ค.

3. VDOM, Virtual Document Object Model

React๋Š” DOM์„ ์ง์ ‘์ ์œผ๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ Virtual DOMํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ. ์‹ค์ œ DOM๊ณผ ์ด VDOM์„ ๊ณ„์†์ ์œผ๋กœ ๋น„๊ต๋ฅผ ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ๊ฒŒ ์ƒ๊ธฐ๋ฉด ๊ทธ ํŠธ๋ฆฌ๋งŒ ์ƒˆ๋กญ๊ฒŒ ๋ Œ๋”๋ง ํ•จ. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ธ ๊ฒƒ!

์„ ์–ธ์  api

  • ์ปดํฌ๋„ŒํŠธ: ์ƒˆ๋กœ์šด ํŠธ๋ฆฌ๋…ธ๋“œ ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ ์ฃผ๋Š” ๊ฒƒ ๋ฟ์ž„

  • ๊ทธ๋ƒฅ <> <> ์ด๋Ÿฐ ํ˜•์‹์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

  • <-> ์„œ์ˆ ํ˜• api :

    • React.createElement("div", {className:"sohee"}, "hello world")

key ๋ฅผ ์จ์ฃผ๋Š” ์ด์œ 

Dom์„ ๋น„๊ตํ•  ๋•Œ ์ˆœ์„œ๋งŒ ๋ฐ”๋€Œ์—ˆ๋Š”๋ฐ ๋‹ค ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋‹ค ๋ฆฌ๋ Œ๋”๋งํ•˜๋Š” ๋ถˆ์ƒ์‚ฌ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด

Last updated