[React] React.js

tndkzjdยท2024๋…„ 3์›” 14์ผ

๐Ÿ“ŒReact.js

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•˜๋‚˜๋กœ์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ํŽ˜์ด์Šค๋ถ๊ณผ ๊ฐœ๋ณ„ ๊ฐœ๋ฐœ์ž ๋ฐ ๊ธฐ์—…๋“ค ๊ณต๋™์ฒด์— ์˜ํ•ด ์œ ์ง€๋ณด์ˆ˜ ๋œ๋‹ค.

React๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ „์—๋Š” AngularJS ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด MVC๋‚˜ MVVM๊ณผ ๊ฐ™์€ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค

ํ•˜์ง€๋งŒ React๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ MVC ๋˜๋Š” MVVM ํŒจํ„ด์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ , ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„ํƒํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ UI๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ์š”.

React์˜ ๋˜ ๋‹ค๋ฅธ ํ•ต์‹ฌ ํŠน์ง•์€ ๊ฐ€์ƒ DOM์˜ ์‚ฌ์šฉ์ž…๋‹ˆ๋‹ค. ๊ฐ€์ƒ DOM์€ ์‹ค์ œ DOM์˜ ํšจ์œจ์ ์ธ ๋Œ€์ฒด์ œ๋กœ, ์‹ค์ œ DOM์— ๋น„ํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, React๋Š” ๊ฐ€์ƒ DOM์— ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋จผ์ € ์ ์šฉํ•œ ๋‹ค์Œ, ์ตœ์ข…์ ์œผ๋กœ ์‹ค์ œ DOM๊ณผ ๋น„๊ตํ•˜์—ฌ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ์„ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚ค๋ฉฐ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿท๏ธDOM(Document Object Model)

์›น ํŽ˜์ด์ง€๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ

์ฆ‰, ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ๋ฌธ์„œ๋ฅผ ์ฝ์€ ํ›„ ์ƒ์„ฑํ•˜๋Š” ํŽ˜์ด์ง€์˜ ๊ฐ์ฒด ๊ธฐ๋ฐ˜ ํ‘œํ˜„ ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๐Ÿท๏ธ๋ชจ๋“ˆ(Module)

์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์กฐ์งํ™” ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์–ด

์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ , ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•ด ์ฝ”๋“œ ์˜์กด์„ฑ ์ตœ์†Œํ™”ํ•ด์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ ์‹œํ‚จ๋‹ค.

๐Ÿท๏ธ์ปดํฌ๋„ŒํŠธ(Component)

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จ์œ„

์ผ๋ฐ˜์ ์œผ๋กœ HTML,CSS,JavaScript๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: React, Vue.js)์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š”๋ฐ ์ค‘์š”ํ•œ ์—ญํ™œ์„ ํ•œ๋‹ค.

๐Ÿ–ฅ๏ธ์‹ค์Šต

www.Replit.com
์ด ์‚ฌ์ดํŠธ๋Š” ์˜จ๋ผ์ธ ์ฝ”๋“œ ์—๋””ํ„ฐ ๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ, ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋ฐฐ์šฐ๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์‹œ๋„ํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ถ”์ฒœํ•ด์š” ๐Ÿ‘


์ผ๋‹จ ๋จผ์ € Create Repl ์„ ํด๋ฆญํ•˜๊ฒŒ ๋˜๋ฉด ์ด ์ฐฝ์ด ๋œจ๋Š”๋ฐ์š”. Template์—์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์–ธ์–ด๋ฅผ ๊ฒ€์ƒ‰ ํ›„


์ฒ˜์Œ ๊ณต๋ถ€ํ•ด๋ณด๋Š” ๊ฑฐ๋ผ ํŒŒ์ผ๋ช…์„ react first day ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด์ค€ ๋‹ค์Œ Create Repl ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


App.jsx๊ฐ€ ์—ฌ๊ธฐ๊ฐ€ ์ด์ œ ์›น ์‚ฌ์ดํŠธ์— ๋ณด์ผ ๋‚ด์šฉ์ธ๋ฐ์š”.

๐Ÿ’กjsx

JavaScript XML์˜ ์•ฝ์ž๋กœ React.js์—์„œ ์‚ฌ์šฉ๋˜๋Š” JavaScript์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์œผ๋กœ, JavaScript ์ฝ”๋“œ ์•ˆ์—์„œ HTML์™€ ๊ฐ™์€ ๋งˆํฌ์—…์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ณ  React ์ปดํฌ๋„ŒํŠธ์—์„œ UI ๋ Œ๋”๋งํ•  ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค.


์‹คํ–‰ ์‹œ์ผœ๋ณด๋ฉด App.jsx์— ์žˆ๋Š” ๋‚ด์šฉ์ด ๋œจ๋Š” ๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” React๋งŒ ์ง€์›Œ๋ณด๋ฉด

์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Œ!

๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค ๊ฐ™์€ ๊ฒฝ์šฐ ctrl + S๋กœ ์ €์žฅ ํ–ˆ๋Š”์ง€ 
ํ•ญ์ƒ ์ฒดํฌ ํ•ด์•ผ๋˜๊ณ  F5๋กœ ์ƒˆ๋กœ ๊ณ ์นจ๋„ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•ด์ค˜์•ผ ๋๋Š”๋ฐ.. 
์ž๋™์œผ๋กœ ์•Œ์•„์„œ ์—…๋ฐ์ดํŠธ ๋œ๋‹ค ์ง„์งœ ํŽธํ•˜๊ณ  ์ข‹๋„ค์š”. 
์ด๋ž˜์„œ React ๋งŽ์ด ์“ฐ๋Š”๊ตฌ๋‚˜ ๋А๊ผˆ์–ด์š”.. ๐Ÿ‘


๋ฆฌ์•กํŠธ๋Š” ๋‹จ ํ•˜๋‚˜์˜ HTML ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•ด์„œ SPA ๊ฐœ๋ฐœ์„ ํ•œ๋Œ€์š”.

๐Ÿ’ก์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Single Page Application, SPA)

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์›น ์‚ฌ์ดํŠธ์—์„œ ํ•˜๋‚˜์˜ ์›น ํŽ˜์ด์ง€๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์–‘ํ•œ ์ •๋ณด์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ์ œ๊ณตํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹
    • ๋ฒก์—”๋“œ ์„œ๋ฒ„์™€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ†ต์‹ ํ•ด์„œ ์ƒˆ๋กœ๊ณ ์นจํ•˜์ง€ ์•Š๊ณ ๋„ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅ

์—ฌ๊ธฐ์„œ body ์•ˆ์— div์— ์žˆ๋Š” id=root ์ž˜ ๊ธฐ์–ตํ•ด๋‘๊ธฐ !


React์—์„œ๋Š” index.jsx ํŒŒ์ผ์ด ์ค‘์š”ํ•œ๋ฐ
์ด index.jsx ํŒŒ์ผ์€
index.html ๊ณผ App.jsx๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ํŒŒ์ผ

์•ˆ์— ๋‚ด์šฉ์„ ๋ณด๋ฉด doument.getElementByID('root'))
์•„๊นŒ ๊ธฐ์–ตํ•˜๋ผ๋˜ id์ธ root๋ž‘ ์ด์–ด์ฃผ๊ฒ ๋‹ค๋Š” ๋œป


import App from './App' ์€


์ด App.jsx ํŒŒ์ผ์„ ๊ฐ€๋ฅดํ‚ค๋Š” ๊ฒƒ

์ด์ œ ๋ฐ•์Šค์— ์„ ์„ ๊ทธ๋ ค๋ณด๋ ค๊ณ  ํ•จ

๊ธฐ์กด ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹์€ <div class=""> ์ฃผ๋ฉด ๋์ง€๋งŒ React๋Š” <div className="box">์„ className์„ ์ค˜์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค


์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ•์Šค์— ์„ ์ด ์ƒ๊ธด ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Œ!

๋ฐ•์Šค 4๊ฐœ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๋ฉด ๋˜์ง€๋งŒ ์ฝ”๋“œ ๋ณด๋ฉด ๊ฐ™์€ ๋‚ด์šฉ์ด ์ค‘๋ณต ๋ผ์žˆ์–ด ๋ณด๊ธฐ ์ข‹์ง€ ์•Š์Œ..

src ํด๋” ์•ˆ์— Box.jsx ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ 
์ด ๋•Œ Box.jsx๋Š” ์ปดํฌ๋„ŒํŠธ

์œ„์ชฝ์— import ํ•ด์ค€ ๋‹ค์Œ


function ํ•จ์ˆ˜ ์‚ฌ์šฉํ•ด์„œ ์•„๊นŒ ๋งŒ๋“  return


Box ๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ export ๋‚ด๋ณด๋‚ด๊ธฐ ํ•  ์ค€๋น„๊ฐ€ ๋๋‹ค๋Š” ๋œป

๊ทธ๋Ÿฐ ๋‹ค์Œ App.jsx ๋กœ ๋Œ์•„์™€์„œ
Box๋ฅผ import ํ•ด์ฃผ๊ณ  main ์•ˆ์— ์ผ๋˜ ๋‚ด์šฉ๋“ค์€ ๋‹ค ์ง€์›Œ์ค€๋‹ค

Box ํ•œ๊ฐœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ ค๊ณ  ํ•˜๋ฉด main ์•ˆ์— Box๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋Œ€๋ฐ•..

๋งŒ์•ฝ 2๊ฐœ ๋” ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ๋‹ค ํ•˜๋ฉด

์•„๊นŒ๋ณด๋‹ค ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ ํ•˜๊ธฐ์—๋„ ์šฉ์ดํ•ด์ง„ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค

์ด์ œ Box ๊ฐ’์— name์„ ์ค˜์„œ

๊ฐ๊ฐ ๋‹ค ๋‹ค๋ฅด๊ฒŒ name ์ค€๋Œ€๋กœ ์ถœ๋ ฅ์ด ๋œ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค
์ด๊ฑฐ๋ฅผ react ์—์„œ props ๊ฐœ๋…์ด๋ผ๊ณ 

์ด๋ฒˆ์—” num ์„ ์ถ”๊ฐ€ํ•ด์„œ

์—ฌ๊ธฐ์—์„œ button ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค ํ•˜๋ฉด
๊ธฐ์กด์—๋Š” ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค button์„ ๋„ฃ์–ด์คฌ์–ด์•ผ ํ–ˆ๋Š”๋ฐ

React๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๋‹ค๋‹ˆ๋ฉด์„œ ๋ฒ„ํŠผ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ฒŒ ๋œ ๊ฒƒ!

๊ธฐ์กด ํ•˜๋˜๋Œ€๋กœ button์— onClick ์ด๋ฒคํŠธ ์ค˜์„œ alert ์ฐฝ ๋„์šฐ๊ธฐ

์ด์ œ ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด alert ์ฐฝ ๋„์›Œ์ง„ ๊ฑธ ๋ณผ์ˆ˜์žˆ๊ฒŒ ๋˜๋Š”๋ฐ ..

๐Ÿ“Œ์š”์•ฝ

HTML ์ปดํฌ๋„ŒํŠธ์™€ ๊ทธ์™€ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋ฅผ ๋ญ‰์ณ์„œ ์„ธํŠธ๋กœ ๋งŒ๋“ค๊ณ  ์ด๊ฑฐ๋ฅผ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•œ๋‹ค.
๋ฆฌ์•กํŠธ๋Š” ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค์–ด์„œ ๊ฐ€์ ธ๋‹ค ์จ์„œ ์ฝ”๋“œ์˜ ์žฌํ™œ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ!

profile

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