[React] Movie-app Notes - Basics, JSX

KAYAยท2021๋…„ 11์›” 7์ผ
0

[React] Movie-App

๋ชฉ๋ก ๋ณด๊ธฐ
1/11

๐Ÿ“’ Nomad Coder ReactJS๋กœ ์˜ํ™” ์›น ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ
๊ฐ•์˜๋…ธํŠธ (2021 Updated ver.)


# 1. Vanilla JS vs. React JS

๋จผ์ €, ๋ฆฌ์•กํŠธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ํŽธ๋ฆฌํ•œ์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด Vanilla JS / React JS ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์œผ๋กœ ์นด์šดํŒ… ์•ฑ์„ ๊ตฌํ˜„ํ•ด ๋ณธ๋‹ค.

Vanilla JS

(gif ๋งŒ๋“ค๊ธฐ ๋„ˆ๋ฌด ๊ท€์ฐฎ๋‹ค.. ๊ผญ ํ•„์š”ํ•œ ๊ฑฐ ์•„๋‹ˆ๋ฉด ์ด์   ..^^..)
๊ธธ๊ณ  ๊ธธ๊ณ  ๊ธด ์ฝ”๋“œ

React JS

์—ฌ๊ธฐ์„œ ์“ฐ์ด๋Š” ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ํ˜•์‹์€ ์•„๋‹ˆ๋‹ค (์ข€ ๋” ๋ณต์žกํ•˜๊ณ  ์–ด๋ ค์šด ๋ฐฉ์‹).
์„ค๋ช…์šฉ ์ฝ”๋“œ์ž„์„ ์ธ์ง€ํ•˜์ž.

๋ฆฌ์•กํŠธ๋Š” index์— HTML ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  JS, ReactJS๋กœ ๋ชจ๋“  elements๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์š”์†Œ๋ฅผ ์ƒ์„ฑํ•จ๊ณผ ๋™์‹œ์— CSS, ์ด๋ฒคํŠธ๊นŒ์ง€ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ์ž‘์—…(ex. addEventListenr())์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ„ํŽธํ•˜๋‹ค.

  • React ๊ตฌ์„ฑ์š”์†Œ
    <script> ์ฒซ๋ฒˆ์งธ ์†Œ์Šค๋Š” React JS, ๋‘๋ฒˆ์งธ ์†Œ์Šค๋Š” React-DOM์ด๋‹ค.
    ๋‘ ๊ฐ€์ง€๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ์—ญํ• ์„ ํ•œ๋‹ค.

    • React JS
      app์ด interactive UI๋ฅผ ๋งŒ๋“œ๋Š” Library / Power
      (elements, events ์ƒ์„ฑ์— ๊ธฐ์—ฌ)

    • React DOM
      Library or Package
      React Elements๋ฅผ HTML๋กœ ๋ฐ”๊พธ๋Š” ์—ญํ• 
      (์‹ค์งˆ์ ์œผ๋กœ ๋ฆฌ์•กํŠธ์˜ ์—˜๋ฆฌ๋จผํŠธ๋“ค์„ ์“ฐ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•จ)

<!-- HTML์—์„œ react import -->
//React JS
<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
//React-DOM
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>

  • ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ฆฌ์•กํŠธ๋Š” ์ž‘๋™ ๋ฐฉ์‹์ด ๋ฐ˜๋Œ€์ด๋‹ค.

    • ๋ฐ”๋‹๋ผ : HTML๋กœ ๊ทธ๋ฆฌ๊ณ  (draw) ---> JS๋กœ HTML ์ˆ˜์ • (update)
    • ๋ฆฌ์•กํŠธ : ๋ชจ๋“  ์‹œ์ž‘์„ JS๋กœ ๋งŒ๋“ค๊ณ  (build) ---> HTML๋กœ ํ‘œ๊ธฐ (draw)
  • interactive์˜ Key Point๋Š” event์˜ ๋ฐœ์ƒ์ด๋‹ค.
    addEventListener๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋Œ€์‹ ์— property๋ฅผ ์ ์šฉํ•จ์œผ๋กœ์จ ๋” ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

Summary

  1. React๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”์†Œ(element)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ์š”์†Œ์— ์†์„ฑ(propert)๋ฅผ ์ถ”๊ฐ€/์—ฐ๊ฒฐํ•˜๋Š” ์ผ์ด ์‰ฌ์›Œ์ง„๋‹ค.
  2. ๋ชจ๋“  asset์„ JS๋กœ ๋งŒ๋“  ํ›„, ์ตœ์ข…์ ์œผ๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ HTML์— ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํŠธ๋กคํ•˜๋Š” ํž˜์„ ๊ฐ€์ง„๋‹ค.
    ์ด๊ฒƒ์ด React JS์˜ ๊ฐ€์žฅ ํฐ ํŒŒ์›Œ.
  3. ์ด๋กœ ์ธํ•ด ๋น ๋ฅด๊ฒŒ ์•ฑ์„ ๋กœ๋”ฉํ• ์ˆ˜ ์žˆ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋Š”๋‹ค. (SPA ์žฅ์ ๊ณผ ์—ฐ๊ฒฐ)

# 2. JSX

์œ„์—์„œ ํ–ˆ๋˜ ๋ฆฌ์•กํŠธ ์ƒ์„ฑ์ž‘์—…์„ ๋” ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœํ•œ ๊ฒƒ์ด JSX๋‹ค. JSX๋Š” JavaScript ํ™•์žฅ๋ฌธ๋ฒ•์œผ๋กœ HTML, JS์™€ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋ฅผ ๋ ๊ณ  ์žˆ๋‹ค. React ์š”์†Œ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๋‘ ์ฝ”๋“œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.
JSX ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ๊ณผ ํŽธ๋ฆฌํ•จ์„ ๋ชจ๋‘ ์ƒ์Šน์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

# 2-1. Compile JSX

์œ„์˜ ์ž‘์—…๊นŒ์ง€๋งŒ ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋Œ๋ ค๋ณด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” JSX ๋ฌธ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด Babel์ด๋‹ค

Babel ๋งํฌ๋ฅผ importํ•˜๊ณ  compileํ•  script์˜ type์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด, Babel์ด JSX ๋ฌธ๋ฒ•์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋ณ€ํ™˜ํ•ด ์ค€๋‹ค.

# 2-2. JSX Component

// rendering
const container = React.createElement("div", null, [h3, btn])

Original React๋กœ ์ผ๋˜ ๋ Œ๋”๋ง ์ฝ”๋“œ๋ฅผ JSX์˜ ๋ฌธ๋ฒ•์œผ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ๋Š” Component ๋ฐฉ์‹์ด ํ•„์š”ํ•˜๋‹ค.

์ƒ์ˆ˜๋กœ ์„ ์–ธํ–ˆ๋˜ ํƒ€์ดํ‹€๊ณผ ๋ฒ„ํŠผ์„ ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๊ณ , ์ƒ์ˆ˜๋กœ ์„ ์–ธํ•œ ์ปจํ…Œ์ด๋„ˆ์— ์ปดํฌ๋„ŒํŠธ ๋ฐฉ์‹์œผ๋กœ ๋ถ™์—ฌ์ฃผ๋ฉด ๋ Œ๋”๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ์–ด ์ปดํฌ๋„ŒํŠธ๋กœ ์ ์šฉ์„ ํ•ด์•ผ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์—ˆ๋˜ ์š”์†Œ๋“ค(props)๋ฅผ ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  const Container = (
    <div>
      <Title /> 	// === Title()
      <Button />
    </div>
  )

React๊ฐ€ HTML๊ณผ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก Component ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ™์—ฌ ๋„ฃ์€ ์ฝ”๋“œ๊ฐ€ ํ•จ์ˆ˜๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•œ ๋ฐฉ์‹๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

Summary

JSX๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ์ž‘์€ ์š”์†Œ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
๋ชจ๋“ˆ์ฒ˜๋Ÿผ ์š”์†Œ๋ฅผ ๋ถ„๋ฆฌํ•ด ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ, ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ํšจ์œจ์„ ๋†’์ธ๋‹ค.

profile
๊ฒ…๋ถ€ํ•˜์ž

0๊ฐœ์˜ ๋Œ“๊ธ€