TIL - 21.07.08 ๐Ÿ‘จโ€๐Ÿ’ป - React

์„ฑํ›ˆยท2021๋…„ 7์›” 8์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
24/59
post-thumbnail

TIL - 21.07.08 ๐Ÿ‘จโ€๐Ÿ’ป - React

React

๋ฆฌ์•กํŠธ๋ž€, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ JavaScript ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ณ  ๋น„์Šทํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋Š” Vue.js ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

๋ฆฌ์•กํŠธ์˜ ๋Œ€ํ‘œ์ ์ธ ํŠน์ง•์œผ๋กœ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ,

  1. ์„ ์–ธํ˜•์ด๋ผ๋Š” ์ ,
  2. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์ด๋ผ๋Š” ์ ,
  3. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ์— ๋ฒ”์šฉ์„ฑ์ด ์ข‹๋‹ค๋Š” ์ ์ด๋‹ค.

์„ ์–ธํ˜• (Declarative)

์„ ์–ธํ˜•์ด๋ผ๋Š” ๋œป์€ ๋ช…์‹œ์ , ์ฆ‰ ์ฝ”๋“œ์˜ ์˜๋ฏธ๋ฅผ ๋ถ„๋ช…ํžˆ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์„ฑ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.
๊ธฐ์กด DOM์—์„œ HTML, CSS, JS๋กœ ํ•œ ํŽ˜์ด์ง€๋ฅด ใ„น๋งŒ๋“ค๋• ๊ฐ ์ฝ”๋“œ๊ฐ€ ์ ํžŒ ํŒŒ์ผ์„ ์˜ค๊ณ ๊ฐ€๋ฉฐ ํŽ˜์ด์ง€์˜ ๊ตฌ์„ฑ์„ ํŒŒ์•…ํ•ด์•ผํ–ˆ์ง€๋งŒ, ๋ฆฌ์•กํŠธ๋กœ ๊ฐœ๋ฐœํ• ๋• ํ•œ ํŽ˜์ด์ง€์˜ ๊ตฌ์„ฑ์„ ํ•œ ํŒŒ์ผ์—์„œ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜

๋ฆฌ์•กํŠธ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด ๋†“์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•˜๊ธฐ์— ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋œ ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ ์‚ฌ์šฉ์„ฑ๋„ ์ข‹์•„์ง€๊ณ  ์ปดํฌ๋„ŒํŠธ์˜ ์šฉ๋„๋ฅผ ๋ณด๋‹ค ๋ช…ํ™•ํžˆ ํŒŒ์•… ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ ์ฐจํ›„ ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ ์œ ์ง€๋ณด์ˆ˜ ๋‚œ์ด๋„๋„ ๋‚ฎ์•„์ง€๊ณ  ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ• ๋•Œ ์ปดํฌ๋„ŒํŠธ๋งŒ ๋”ฐ๋กœ ๋•Œ์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณผ ์ˆ˜ ์žˆ๊ธฐ์— ํ…Œ์ŠคํŠธ ๋‚œ์ด๋„๋„ ๋ณด๋‹ค ๋‚ฎ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

๋ฒ”์šฉ์„ฑ

๋ฆฌ์•กํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ์— ๋‹ค๋ฅธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
๊ฒŒ๋‹ฅ ๊ธ€๋กœ๋ฒŒ IT ๊ธฐ์—…์ธ Facebook์—์„œ ์œ ์ง€, ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ์— ์œ ์ง€๋ณด์ˆ˜๋„ ์ž˜๋  ๋ฟ๋”๋Ÿฌ ํ˜•์ œ ๊ฒฉ์˜ ์–ธ์–ด์ธ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ์—ญ์‹œ ๊ฐ€๋Šฅํ•˜๋‹ค.

JSX

๋ฆฌ์•กํŠธ์—์„œ๋Š” UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ๋ฒ•์œผ๋กœ JSX(JavaScript XML)์„ ์‚ฌ์šฉํ•˜๋ฉฐ JSX๋Š” ์ด๋ฆ„์—์„œ ์œ ์ถ” ํ•  ์ˆ˜ ์žˆ๋“ฏ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์ด๋‹ค.
์šฐ๋ฆฐ ์ด JSX๋ฅผ ์ด์šฉํ•ด ๋ฆฌ์•กํŠธ์˜ ๋ฌธ๋ฒ•์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

JSX๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ™•์žฅ๋œ ๊ฒƒ์ด๊ธด ํ•˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์€ ์•„๋‹ˆ๊ธฐ์— 'Babel'๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ปดํŒŒ์ผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๊ธฐ์กด DOM์—์„œ ์›น ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ์„ ํ• ๋• HTML, CSS, JS ์„ธ๊ฐ€์ง€ ๋ฌธ๋ฒ•์„ ์ด์šฉํ–ˆ์ง€๋งŒ ๋ฆฌ์•กํŠธ๋กœ๋Š” JS, CSS ๋‘๊ฐ€์ง€ ๋ฌธ๋ฒ•๋งŒ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„์„ ์œ„ํ•ด ํ™•์ธํ•ด์•ผ ํ•  ํŒŒ์ผ์ด ์ค„๊ณ  ์‰ฝ๊ฒŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.

์ฃผ์š” JSX ๋ฌธ๋ฒ•

  1. ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ์ตœ์ƒ๋‹จ์— ์—ฌ๋Š” ํƒœ๊ทธ์™€ ๋‹ซ๋Š” ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ค˜์•ผํ•จ.
let func = () => {
 return (
   <div>Division 1</div>
   <div>Division 2</div>
 ) 
}
// ์ด๋Ÿฐ ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒํ•œ๋‹ค.
// ๊ทธ๋ž˜์„œ ์ œ์ผ ๊ฒ‰์— <div> ํƒœ๊ทธ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๊ฐ์‹ธ์ค˜์•ผํ•œ๋‹ค.
  1. ํด๋ž˜์Šค ๋ถ€์—ฌ๋Š” class=''๊ฐ€ ์•„๋‹Œ className=''

  2. JSX์—์„œ ํ˜ธ์ถœํ• ๋• ์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•œ๋‹ค.
    ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ธ์‹ํ•œ๋‹ค.

  3. ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์€ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๋Š” ํŒŒ์ผ๋ช…์—๋„ ํ•ด๋‹น๋œ๋‹ค.

  4. ์กฐ๊ฑด๋ฌธ์€ if๋ฌธ์ด ์•„๋‹Œ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    if๋ฌธ์€ ํ‘œํ˜„์‹์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  5. ๋ฆฌ์•กํŠธ์—์„œ ์—ฌ๋Ÿฌ HTML ์š”์†Œ๋ฅผ ํ‘œ์‹œํ• ๋• map() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    ๋‹ค๋งŒ ๋ฐ”๋‹๋ผ์—์„œ ์‚ฌ์šฉํ• ๋•Œ์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฐ˜๋“œ์‹œ key ์†์„ฑ์ด ํ•„์š”ํ•˜๋‹ค.
    ํ‚ค๋Š” map ๋ฉ”์†Œ๋“œ์˜ ๋‚ด๋ถ€์— ์žˆ๋Š” ์ฒซ ์š”์†Œ์— ์†์„ฑ์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ์‹œ ์ฃผ์˜์ 

const func = () => () ;
์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ• ๋•Œ => ๋’ค์— ์˜ฌ ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์„ ์ค‘๊ด„ํ˜ธ๋กœ ๋ฌถ์œผ๋ฉด return์„ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•˜๊ณ  ์†Œ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ฑฐ๋‚˜ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด => ์ดํ›„์˜ ๋‚ด์šฉ์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

GOOD ๐Ÿ˜‰

์˜ค๋Š˜ ๋ฆฌ์•กํŠธ๋ฅผ ํ•ฅ์•„๋ดค๋‹ค.

BAD ๐Ÿ˜ฅ

๊ทธ๋ž˜๋„ ๊ณ ์ฐจํ•จ์ˆ˜๊นŒ์ง€๋Š” ์ข€ ์นœํ•ด์งˆ ๊ป€๋•์ง€๊ฐ€ ๋ณด์˜€๋Š”๋ฐ ์ด๋†ˆ์˜ ๋ฆฌ์•กํŠธ๋Š” ์ฒ ๋ฒฝ์„ ์ณ์„œ ์Šฌํ”„๋‹ค.

TO DO ๐Ÿ”ฅ

  • React
    • ๋…ธ๋งˆ๋“œ์ฝ”๋” ๋ฆฌ์•กํŠธ ํด๋ก ์ฝ”๋”ฉ(์ฃผ๋ง)
    • ์œ ํŠœ๋ธŒ ์ฝ”๋”ฉ์•™๋งˆ๋‹˜ ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ๊ฐ•์˜ ๋“ฃ๊ธฐ

  • Node.js

Retrospect ๐Ÿง

์˜ค๋Š˜ ์Šคํ”Œ๋ฆฐํŠธ ์ œ์ถœ ์ตœ์ €์„ ์€ ๊ฐ€๋ณ๊ฒŒ ๋„˜๊ฒผ๋Š”๋ฐ ์–ด๋“œ๋ฐด์Šค๋“œ ํ‘ผ๋‹ค๊ณ  ์ง„์งœ ์•ˆ๋Œ์•„๊ฐ€๋Š” ๋จธ๋ฆฌ ๋„ˆ๋ฌด ์Œฉ์Œฉ ๋Œ๋ ธ๋‹ค.
๊ทผ๋ฐ ์ด๊ฒŒ ๋‚ด๊ฐ€ ๋Œ๋ฆฐ๋‹ค๊ณ  ๋Œ์•„๊ฐ€์•ผ ๋ง์ด์ง€..

Reference ๐Ÿ™‡

profile
์–ด๋–ป๊ฒŒ ์ด๊ฑธ ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ

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