๐Ÿ“š Study/JS, JQuery

[REACT JS] ์—˜๋ฆฌ๋จผํŠธ ๋ Œ๋”๋ง

kkh1902 2022. 1. 29. 20:21
728x90
๋ฐ˜์‘ํ˜•

์—˜๋ฆฌ๋จผํŠธ๋Š” React ์•ฑ์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

์—˜๋ฆฌ๋จผํŠธ๋Š” ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋‚ด์šฉ์„ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.

const element = <h1>Hello, world</h1>;

๋ธŒ๋ผ์šฐ์ € DOM ์—˜๋ฆฌ๋จผํŠธ์™€ ๋‹ฌ๋ฆฌ React ์—˜๋ฆฌ๋จผํŠธ๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์ด๋ฉฐ(plain object) ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React DOM์€ React ์—˜๋ฆฌ๋จผํŠธ์™€ ์ผ์น˜ํ•˜๋„๋ก DOM์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜

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

DOM์— ์—˜๋ฆฌ๋จผํŠธ ๋ Œ๋”๋งํ•˜๊ธฐ

HTML ํŒŒ์ผ ์–ด๋”˜๊ฐ€์— <div>๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.

<div id="root"></div>

์ด ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๋ฅผ React DOM์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ “๋ฃจํŠธ(root)” DOM ๋…ธ๋“œ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

React๋กœ ๊ตฌํ˜„๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฃจํŠธ DOM ๋…ธ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. React๋ฅผ ๊ธฐ์กด ์•ฑ์— ํ†ตํ•ฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋งŒํผ ๋งŽ์€ ์ˆ˜์˜ ๋…๋ฆฝ๋œ ๋ฃจํŠธ DOM ๋…ธ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฃจํŠธ DOM ๋…ธ๋“œ์— ๋ Œ๋”๋งํ•˜๋ ค๋ฉด ๋‘˜ ๋‹ค ReactDOM.render()๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

const element = <h1>Hello, world</h1>;
ReactDOM.render(element, document.getElementById('root'));

CodePen์—์„œ ์‹คํ–‰ํ•˜๊ธฐ

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ™”๋ฉด์— “Hello, world”๊ฐ€ ๋ณด์ผ ๊ฒ๋‹ˆ๋‹ค.

๋ Œ๋”๋ง ๋œ ์—˜๋ฆฌ๋จผํŠธ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

React ์—˜๋ฆฌ๋จผํŠธ๋Š” ๋ถˆ๋ณ€๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•œ ์ดํ›„์—๋Š” ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ์˜ ์ž์‹์ด๋‚˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—˜๋ฆฌ๋จผํŠธ๋Š” ์˜ํ™”์—์„œ ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„๊ณผ ๊ฐ™์ด ํŠน์ • ์‹œ์ ์˜ UI๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์†Œ๊ฐœํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•˜๋ฉด UI๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ƒˆ๋กœ์šด ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ReactDOM.render()๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ ๋˜‘๋”ฑ๊ฑฐ๋ฆฌ๋Š” ์‹œ๊ณ„๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

function tick() {
  const element = (
    <div>
      <h1>Hello, world!</h1>
      <h2>It is {new Date().toLocaleTimeString()}.</h2>
    </div>
  );
  ReactDOM.render(element, document.getElementById('root'));}

setInterval(tick, 1000);

CodePen์—์„œ ์‹คํ–‰ํ•˜๊ธฐ

์œ„ ํ•จ์ˆ˜๋Š” setInterval() ์ฝœ๋ฐฑ์„ ์ด์šฉํ•ด ์ดˆ๋งˆ๋‹ค ReactDOM.render()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜

์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ React ์•ฑ์€ ReactDOM.render()๋ฅผ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์žฅ์—์„œ๋Š” ์ด์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์œ ์ƒํƒœ ์ปดํฌ๋„ŒํŠธ์— ์–ด๋–ป๊ฒŒ ์บก์Šํ™”๋˜๋Š”์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์ฃผ์ œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ด€์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

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

๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด ๋งˆ์ง€๋ง‰ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค์ดˆ ์ „์ฒด UI๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋„๋ก ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์ง€๋งŒ React DOM์€ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋œ ํ…์ŠคํŠธ ๋…ธ๋“œ๋งŒ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝํ—˜์— ๋น„์ถ”์–ด ๋ณผ ๋•Œ ํŠน์ • ์‹œ์ ์— UI๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€ ๊ณ ๋ฏผํ•˜๋Š” ์ด๋Ÿฐ ์ ‘๊ทผ๋ฒ•์€ ์‹œ๊ฐ„์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ UI๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ˆ˜์˜ ๋ฒ„๊ทธ๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•