๊ด€๋ฆฌ ๋ฉ”๋‰ด

Bin's Blog

[์œ ๋ฐ๋ฏธx์Šค๋‚˜์ดํผํŒฉํ† ๋ฆฌ] 10์ฃผ ์™„์„ฑ ํ”„๋กœ์ ํŠธ ์บ ํ”„ 17์ผ์ฐจ - ๋ฆฌ์•กํŠธ(1) ๋ณธ๋ฌธ

ํ•™์Šต์ผ์ง€

[์œ ๋ฐ๋ฏธx์Šค๋‚˜์ดํผํŒฉํ† ๋ฆฌ] 10์ฃผ ์™„์„ฑ ํ”„๋กœ์ ํŠธ ์บ ํ”„ 17์ผ์ฐจ - ๋ฆฌ์•กํŠธ(1)

hotIce 2023. 6. 21. 17:54
728x90

 

 

๐Ÿค” ๋ฆฌ์•กํŠธ๋Š” ๋ญ์ง€? 

๐Ÿ‘‰ ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

๐Ÿ‘‰ ํŽ˜์ด์Šค๋ถ์ด ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๋“ค์ด ์›น ํŽ˜์ด์ง€ ํ˜น์€ ์•ฑ์˜ ๋ณต์žกํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.

๐Ÿ‘‰ Vue์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ์ด์œ ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ „์ฒด์ ์ธ ๊ธฐ๋Šฅ ์ง‘ํ•ฉ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, React๋Š” ๋ผ์šฐํŒ…, HTTP ์š”์ฒญ, form validation ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

๐Ÿ“– ๋ฆฌ์•กํŠธ ํŠน์ง•

๐Ÿ‘‰ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜: ์ปดํฌ๋„ŒํŠธ๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์œผ๋กœ, ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์ฒด ๋กœ์ง์„ ๊ฐ€์ง€๋ฉฐ, ๊ทธ ๋กœ์ง์€ JavaScript ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž‘์„ฑ๋œ๋‹ค. ์ด๋กœ ์ธํ•ด UI๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ณ„์ ์ธ ์กฐ๊ฐ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š”๋ฐ ์ตœ์ ํ™” ๋˜์–ด ์žˆ๋‹ค. 

 

๐Ÿ‘‰ ์„ ์–ธ์  ์ ‘๊ทผ: ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ƒ์„ธํžˆ ์„ค๋ช… ํ•„์š” ์—†์ด, ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์„ ์–ธํ•˜๋ฉด React๊ฐ€ ์ด๋ฅผ ๋„๋‹ฌํ•˜๋„๋ก ์ ์ ˆํ•œ JavaScript ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

๐Ÿ‘‰ ๊ฐ€์ƒ ๋”: ๋ฆฌ์•กํŠธ๋Š” ๊ฐ€์ƒ๋”์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ–ˆ๋Š”๋ฐ, ์‹ค์ œ DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹ , React๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์ƒ์˜ DOM์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์ด ๊ฐ€์ƒ์˜ DOM์„ ์‹ค์ œ DOM๊ณผ ๋น„๊ตํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ๋งŒ์„ ๋ฐ˜์˜ํ•œ๋‹ค. 

 

๐Ÿ‘‰ ๋ฆฌ์•กํŠธ Hooks: ๋ฆฌ์•ก์˜ ์ตœ์‹  ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ, ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ์„ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. state ๊ด€๋ฆฌ๋‚˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

1๏ธโƒฃ createElement ํ•จ์ˆ˜

๐Ÿ‘‰ ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ React ์—˜๋ฆฌ๋จผํŠธ๋Š” React์—์„œ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ž‘์€ ์กฐ๊ฐ์ด๋‹ค.

๐Ÿ‘‰ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” ์ƒ์„ฑํ•  ์š”์†Œ์˜ ํƒ€์ž„(Ex. div, h1, p...)

๐Ÿ‘‰ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ์š”์†Œ์˜ ์†์„ฑ(Ex. className, style, onClick)๊ณผ ๊ฐ™์€ ์†์„ฑ

๐Ÿ‘‰ ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์š”์†Œ์˜ ์ž์‹(children) - ์š”์†Œ ๋‚ด๋ถ€์— ๋‹ค๋ฅธ ์š”์†Œ๋‚˜ ํ…์ŠคํŠธ๋ฅผ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.  

const container = React.createElement("div", null, "hello");

 

2๏ธโƒฃ JSX(JS + XML)

๐Ÿ‘‰ const element = <h1>hello world</h1>์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” HTML ์š”์†Œ๋“ค์„, JS ์•ˆ์—์„œ ์‹ค์ œ HTML์˜ ๋ชจ์Šต๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.

๐Ÿ‘‰ ์ผ๋ฐ˜์ ์œผ๋กœ HTML๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์„ ๊ฐ€์ง€๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์ง€๋งŒ, Babel๊ณผ ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ผ๋ฐ˜ JavaScript ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. 

๐Ÿ‘‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹์„ ์ค‘๊ด„ํ˜ธ `{}`๋กœ ๊ฐ์‹ธ์„œ ์ง์ ‘ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

function App() {
  const name = 'React';
  return <h1>Hello, {name}</h1>;
}

 

3๏ธโƒฃ React ๊ธฐ๋ณธ๊ตฌ์กฐ

<div id='root'></div>
  <script type='text/babel'>
    function Function() {
       return()
    }
    // ํ•จ์ˆ˜์˜ ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž
    ReactDOM.render(<Function />, root)
  </script>

 

4๏ธโƒฃ UseState

๐Ÿ‘‰ ๊ธฐ๋ณธ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Hook์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

๐Ÿ‘‰ useState๋Š” ํ•˜๋‚˜์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋ฐ, ์ด๋Š” ์ƒํƒœ์˜ ์ดˆ๊ธฐ๊ฐ’์ด๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’์€ ๋ฐฐ์—ด๋กœ, ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋Š” ์ƒํƒœ๋ณ€์ˆ˜, ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋Š” ํ•ด๋‹น ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

const [count, setCount] = React.useState(0);

 

๐Ÿ‘‰ ์‚ฌ์šฉ ์˜ˆ์‹œ

function App() {

  let [๋ฉ”๋‰ด, ๋ฉ”๋‰ด๋ณ€๊ฒฝ] = React.useState(["๊น€๋ฐฅ", "๋ผ๋ฉด", "๋–ก๋ณถ์ด"]);
  let [์ข‹์•„์š”, ์ข‹์•„์š”๋ณ€๊ฒฝ] = React.useState(0);


  return (
    <div className="App">
      <div className="black-nav">
        <h4>blog</h4>
      </div>
      <div className="list">
        <h4> { ๋ฉ”๋‰ด[0] } <span onClick={ () => { ์ข‹์•„์š”๋ณ€๊ฒฝ(์ข‹์•„์š”+1) } }>๐Ÿ‘</span> { ์ข‹์•„์š” } </h4>
        <p>1์›” 10์ผ</p>
      </div>
      <div className="list">
        <h4> { ๋ฉ”๋‰ด[1] } </h4>
        <p>1์›” 10์ผ</p>
      </div>
      <div className="list">
        <h4> { ๋ฉ”๋‰ด[2] } </h4>
        <p>1์›” 10์ผ</p>
      </div>
    </div>
  );
}

 

 

๋ณธ ํ›„๊ธฐ๋Š” ์œ ๋ฐ๋ฏธ-์Šค๋‚˜์ดํผํŒฉํ† ๋ฆฌ 10์ฃผ ์™„์„ฑ ํ”„๋กœ์ ํŠธ์บ ํ”„ ํ•™์Šต ์ผ์ง€ ํ›„๊ธฐ๋กœ ์ž‘์„ฑ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

728x90