[React] React Start ๐Ÿ˜›

soyeonยท2022๋…„ 8์›” 2์ผ
0
post-thumbnail

React

: ๋งŽ์€ library๋ฅผ ์ด์šฉํ•ด์„œ "UI rendering"์„ ํ•œ๋‹ค.

React๋Š” Client์™€์˜ interaction์ด ๋งŽ์€ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜๋‹ค.
React๋Š” framework๋ณด๋‹ค๋Š” Library์— ๊ฐ€๊น๋‹ค.

platform, framework, library

  • platform
    ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ ์‹œ์ผœ ์ค„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ
    : Java, Node
  • framework
    : ์‹คํ–‰ ํ๋ฆ„์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

React๋Š” component(React app์„ ๊ตฌ์„ฑํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๋‹จ์œ„)์˜ ์ง‘ํ•ฉ์ด๋‹ค.
๊ฐ component ๋ณ„๋กœ ๋ณ„๋„์˜ js ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค.

component
1. classํ˜• component
2. ํ•จ์ˆ˜ํ˜• component

: ๊ณผ๊ฑฐ์—๋Š” classํ˜• component๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ํ•จ์ˆ˜ํ˜• component๋ณด๋‹ค ๊ธฐ๋Šฅ์€ ๋งŽ์ง€๋งŒ ์ฝ”๋“œ๋Ÿ‰์ด ๋งŽ์•„์„œ ๋ณต์žกํ•˜๊ณ  ์ƒ๋Œ€์ ์œผ๋กœ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.
: ํ•จ์ˆ˜ํ˜• component๋Š” ๊ธฐ๋Šฅ์ƒ์— ์ œ์•ฝ์ด ์žˆ์ง€๋งŒ classํ˜• component์— ๋น„ํ•ด ๊ฐ„๊ฒฐํ•˜๊ณ  ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

React Hooks๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ํ˜• component์— ๊ธฐ๋Šฅ์ด ๊ฐœ์„ ๋˜๋ฉด์„œ ์ด์ œ๋Š” classํ˜• component๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

jQuery๋Š” ์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ 1. Maintenance(์œ ์ง€๋ณด์ˆ˜) 2. ์†๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋งŽ์€ ์–‘์˜ interaction์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋Š๋ ค์ง„๋‹ค. jQuery๋Š” DOM์„ ์ง์ ‘ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— DOM์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค repaint ๋œ๋‹ค.
=> Virtual DOM์„ ์ด์šฉํ•ด์„œ ์†๋„๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. (Rendering์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•˜์ง€ ์•Š๋„๋ก ํ•ด์ค€๋‹ค.)

JSX (Javascript syntax extension)

: Javascript ํ™•์žฅ ๋ฌธ๋ฒ•์ด๋‹ค. React๋Š” JSX๋ฅผ ์ด์šฉํ•œ๋‹ค. JSX๋ฅผ ์ด์šฉํ•ด์„œ UI๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
HTML๊ณผ Javascript์˜ ํ˜ผํ•ฉ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์›๋ž˜๋Š” const str = "<H1> Hello World </H1>"; => Javascript ์ฝ”๋“œ
const str = <H1> Hello World </H1>; => JSX ์ฝ”๋“œ

์‚ฌ์šฉ ๊ทœ์น™

  1. JSX๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ element๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ์š”์†Œ๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค.

ํ™˜๊ฒฝ ๊ตฌ์ถ•

  1. Node.js ํ•„์š” (npm) - ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค. React๊ฐ€ Node ์ƒ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. Node.js ์„ค์น˜

  2. React Application ๋งŒ๋“ค๊ธฐ

  • webpack module
    : ๋ฐฐํฌ๋ฅผ ํ•  ๋•Œ ์—ฌ๋Ÿฌ๊ฐœ์˜ JS ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ๋Š”๋‹ค.
  • babel module
    : ES6๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง๋„ ๋งŽ์€ client๋“ค์€ ES6๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ตฌํ˜• browser๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ES6๋ฅผ ๊ตฌํ˜• browser์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” Javascript ์ฝ”๋“œ๋กœ ๋ณ€ํ˜•ํ•œ๋‹ค.
    => ๊ณผ๊ฑฐ์—๋Š” ์ด ๋‘˜์„ ๋จผ์ € ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•œ ํ›„์— React App์„ ์ž‘์„ฑํ•˜์˜€๋‹ค.
    => "create-react-app" ์„ ์ด์šฉํ•ด์„œ ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. (npm์œผ๋กœ ๋ฐ›๋Š”๋‹ค.)
  1. my-todo-app ํด๋” ์ƒ์„ฑํ•˜๊ณ , ํ„ฐ๋ฏธ๋„์—์„œ ์—ฐ๋‹ค. npx create-react-app . ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.

  2. my-todo-app ํด๋”๋ฅผ ์—ฐ๋‹ค.

  • public
    -index.html : ์‹œ์ž‘ HTML
  • src
    -index.js : Javascript ์‹œ์ž‘์ 

package.json
: ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ •๋ณด

  1. ์‹œ์ž‘ npm run start

Todo App ๋งŒ๋“ค๊ธฐ

  • ๋งŒ๋“ค ํ™”๋ฉด

์ฝ”๋“œ ๊ตฌํ˜„

์ฝ”๋“œ ์ €์žฅ์†Œ

  1. classํ˜• component -> ํ•จ์ˆ˜ํ˜• component ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.
  2. component ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ค€๋‹ค.

    -> ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜, rendering ํšจ์œจ์„ ์œ„ํ•ด
  3. tailwind๋กœ ์Šคํƒ€์ผ ์˜ˆ์˜๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
  4. Drag & Drop(dnd) ๊ตฌํ˜„ํ•˜๊ธฐ
    : web page(application)์—์„œ ๊ตฌํ˜„์ด ์‰ฝ์ง€ ์•Š๋‹ค.
    HTML5์— ๋“ค์–ด์˜ค๋ฉด์„œ dnd API๊ฐ€ ์ •์‹์œผ๋กœ ๋“ฑ์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. (Javascript API)
    Javascript API๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์„œ module๋กœ ์ œ๊ณตํ•œ๋‹ค.
    => "react-beautiful-dnd"
    (dependency๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.)
    (react 16, 17 ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.)
	> npm install react-beautiful-dnd --save --legacy-peer-deps
  • dnd component

    Draggable : dragํ•˜๊ณ  dropํ•˜๋ฉด element์˜ ์†์„ฑ๊ฐ’์ด ๋ณ€ํ•œ๋‹ค.
  1. ํ˜„์žฌ ํŒŒ์ผ(App.js, Lists.js, Form.js)์„ ๋” ์ชผ๊ฐœ์ค€๋‹ค.
    ํ•  ์ผ ํ•˜๋‚˜๋ฅผ ํ•˜๋‚˜์˜ component๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.(List.js)

Rendering์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด์•„์š” ๐Ÿค”
ํ˜„์žฌ ์ฝ”๋“œ ๋ฌธ์ œ : ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค rendering์ด ๋‹ค์‹œ ๋˜๊ณ  ์žˆ๋‹ค. ๋ณ€ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์€ ๋‚ญ๋น„์ด๋‹ค. ์ด ๋‚ญ๋น„๋ฅผ ์ค„์ด๋ฉด ์†๋„๊ฐ€ ๋” ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

=> React.memo()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•œ๋‹ค.
: ๋‹ค์‹œ ๊ทธ๋ฆด ๋•Œ ์ด์ „ ์ƒํƒœ์™€ ๋น„๊ตํ•ด์„œ ๋ณ€ํ™”๊ฐ€ ์—†๋Š” component๋Š” ๋‹ค์‹œ ๊ทธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
=> useCallback()

  1. ์ˆ˜์ • ์ฒ˜๋ฆฌ ๊ตฌํ˜„ํ•˜๊ธฐ
  2. Axios (Ajax ์ฒ˜๋ฆฌ)

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