React - 1

Dearยท2025๋…„ 4์›” 18์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
9/74

๐Ÿ’™๋ฆฌ์•กํŠธ(React)

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ ์ƒํƒœ์— ๋Œ€ํ•œ ๋ทฐ๋งŒ ์„ค๊ณ„ํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ’™ํŠน์ง•

Virtual DOM

์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๋ถ€๋ถ„๋งŒ์„ ์ฐพ์•„์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

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

###๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋˜ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.
๊ฐœ๋ฐœํ•  ๋•Œ ํ•ญ์ƒ ๊ท‘๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

๋†’์€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ณต์žก๋„๊ฐ€ ๋‹จ์ 

๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ state๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•œ๋‹ค. ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ๋”ฐ๋ผ์„œ state๋ฅผ ์ž˜ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

๐Ÿ’™JSX(Javascript Syntax Extension)

Javascript์™€ XML/HTML์„ ํ•ฉ์นœ Javascript ํ™•์žฅ ๋ฌธ๋ฒ•
const element = <h1>Hello, world! </h1>

JSX๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ XML/HTML ์ฝ”๋“œ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •(๋ฒˆ๋“ค๋ง)์„ ํ•œ ๊ฒƒ์ด๋‹ค.
-> ์ตœ์ข…์ ์œผ๋กœ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์ถœ๋ ฅ

createElement()

JSX๋Š” ๊ฒฐ๊ตญ React.createElement() ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

React ์—˜๋ฆฌ๋จผํŠธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋กœ JSX ์ฝ”๋“œ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ™œ์ด๋‹ค.

React.createElement(
  type,         // ํƒœ๊ทธ ์ด๋ฆ„ ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ
  props,        // ์†์„ฑ (className, id, onClick ๋“ฑ)
  ...children   // ์ž์‹ ์š”์†Œ (๋ฌธ์ž์—ด, ๋‹ค๋ฅธ React ์š”์†Œ ๋“ฑ)
)

// JSX ์‚ฌ์šฉํ•œ ์ฝ”๋“œ
const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);

// JSX ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ
const element = React.createElement(
  'h1',
  { className: 'greeting' },
  'Hello, world!'
);

// ์—˜๋ฆฌ๋จผํŠธ
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world!'
  }
};

jsx๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ๊ณผ ๋ณด์•ˆ์„ฑ์ด ์˜ฌ๋ผ๊ฐ„๋‹ค.

root.render()

React ์•ฑ์„ ๋ธŒ๋ผ์šฐ์ €์˜ ์‹ค์ œ DOM์— ๋ Œ๋”๋งํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ํŽ˜์ด์ง€์— ๋ Œ๋”๋งํ•  ๋‚ด์šฉ์„ JSXํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๊ณ , ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” JSX๋ฅผ ๋ Œ๋”๋ง ํ•  document ๋‚ด๋ถ€์š”์†Œ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';

const container = document.getElementById('root'); // HTML์—์„œ ๋ Œ๋”๋งํ•  ์œ„์น˜
const root = ReactDOM.createRoot(container);       // React Root ์ƒ์„ฑ
root.render(<App />);                              // React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ Œ๋”๋ง

๐ŸคํšŒ๊ณ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์–ด๋А ์ •๋„ ์ต์ˆ™ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๋ฆฌ์•กํŠธ๋Š” ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†Œํ•œ ๊ฐœ๋…์ด ๋งŽ์•˜๋‹ค. ํŠนํžˆ JSX ๋ฌธ๋ฒ•๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ, Virtual DOM์˜ ๊ฐœ๋…์ด ๋‚ฏ์„ค์—ˆ๊ณ , ๋‹จ์ˆœํ•œ HTML/CSS ์ž‘์„ฑ๊ณผ๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ UI๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ์ ์—์„œ ๋ง‰๋ง‰ํ•จ์„ ๋А๊ผˆ๋‹ค. ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹ค์Šตํ•ด๋ณด๋‹ˆ render() ๋กœ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š”๊ฑฐ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์žกํžˆ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค.

profile
์นœ์• ํ•˜๋Š” ๊ฐœ๋ฐœ์ž

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