Frontend ๐Ÿ“š/React

[ ์ฝ”๋”ฉ์• ํ”Œ ] React ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ Part2

leejaejae 2023. 10. 11. 18:29

๐Ÿ’‍โ™€๏ธ ๋ธ”๋กœ๊ทธ ๊ธ€ ์ดˆ๊ธฐ ๋ ˆ์ด์•„์›ƒ

function App(){
 
  let posts = '๊ฐ•๋‚จ ์šฐ๋™ ๋ง›์ง‘';
  return (
    <div className="App">
      <div className="black-nav">
        <div>๊ฐœ๋ฐœ blog</div>
      </div>
      <div className="list">
        <h4>๊ธ€์ œ๋ชฉ</h4>
        <p>2์›” 17์ผ ๋ฐœํ–‰</p>
      </div>
    </div>
  )
}
(App.css)

div {
  box-sizing : border-box
}
.list {
  text-align : left;
  padding-left : 20px;
  border-bottom : 1px solid grey;
}

โœ๏ธ state ๋งŒ๋“œ๋Š” ๋ฒ•

- ๋งจ ์œ—์ค„์— import {useState} from 'react'ํ•˜๊ณ  ์›ํ•˜๋Š” ๊ณณ์— useState('๋ณด๊ด€ํ•  ์ž๋ฃŒ') ์“ฐ๋ฉด state์— ์ž๋ฃŒ๋ฅผ ์ž ๊น ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
- ๋‚˜์ค‘์— ์ €์žฅํ•œ ์ž๋ฃŒ๋ฅผ ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด let[a,b] = useState('๋‚จ์ž ์ฝ”ํŠธ ์ถ”์ฒœ');

import { useState } from 'react';

function App(){
 
  let [๊ธ€์ œ๋ชฉ, b] = useState('๋‚จ์ž ์ฝ”ํŠธ ์ถ”์ฒœ');
  let posts = '๊ฐ•๋‚จ ์šฐ๋™ ๋ง›์ง‘';
  return (
    <div className="App">
    	...
	    <h4>{ ๊ธ€์ œ๋ชฉ }</h4>
	...
    </div>
  )
}

1) ๋ณ€์ˆ˜  ๋ง๊ณ  state์— ๋ฐ์ดํ„ฐ ์ €์žฅํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
- state๋Š” ๋ณ€๋™์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด state์“ฐ๋Š” html๋„ ์ž๋™์œผ๋กœ ์žฌ๋ Œ๋”๋ง ํ•ด์ค€๋‹ค.
    → ๊ทธ๋ž˜์„œ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ state๋กœ ๊ตณ์ด ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์Œ!
- ์—ฌ๋Ÿฌ ๊ฐœ์˜ useState() ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  array์ž๋ฃŒ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
- ์ด์ : UI ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๋„ ๋งค์šฐ ํŽธ๋ฆฌ, ์‚ฌ์ดํŠธ๊ฐ€ ์Šค๋ฌด์Šค๊ฐ€ ๋™์ž‘ํ•จ

 

โœ๏ธ ์ข‹์•„์š” ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ

// ์ดˆ๊ธฐ ์ฝ”๋“œ
function App(){

  // ์ข‹์•„์š” ๊ฐฏ์ˆ˜ state๋กœ ๋งŒ๋“ค๊ธฐ
  let [๋”ฐ๋ด‰] = useState(0);
  return (
     <h4> { ๊ธ€์ œ๋ชฉ[0] } <span>๐Ÿ‘</span> { ๋”ฐ๋ด‰ }</h4>
  )
}

1) onClick ์‚ฌ์šฉ๋ฒ•

<div onClick={์‹คํ–‰ํ• ํ•จ์ˆ˜}>

- Click์ด ๋Œ€๋ฌธ์ž!
- {} ์ค‘๊ด„ํ˜ธ ์‚ฌ์šฉ!
- ๊ทธ๋ƒฅ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์•ผ ์ž˜ ๋™์ž‘ํ•จ!

function App(){
  
  function ํ•จ์ˆ˜์ž„(){
    console.log(1)
  }
  return (
     <div onClick={ํ•จ์ˆ˜์ž„}> ์•ˆ๋…•ํ•˜์„ธ์š” </div>
  )
}

// ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ทธ ์ž๋ฆฌ์—์„œ ์ง์ ‘ ๋งŒ๋“ฌ
<div onClick={ function(){ ์‹คํ–‰ํ• ์ฝ”๋“œ } }> 
<div onClick={ () => { ์‹คํ–‰ํ• ์ฝ”๋“œ } }>

2) state ๋ณ€๊ฒฝํ•˜๋Š” ๋ฒ•
- state ๋ณ€๊ฒฝํ•จ์ˆ˜ ์‚ฌ์šฉํ•ด์„œ state ๋ณ€๊ฒฝ
- ์‚ฌ์šฉ๋ฒ•: ๋”ฐ๋ด‰๋ณ€๊ฒฝ(์ƒˆ๋กœ์šดstate)
   → ์˜ˆ: ๋”ฐ๋ด‰๋ณ€๊ฒฝ(1) โŸน state๊ฐ€ 1๋กœ ๋ณ€๊ฒฝ

// ์™„์„ฑ ์ฝ”๋“œ
function App(){
  
  // state ๋ณ€๊ฒฝํ•จ์ˆ˜ ์‚ฌ์šฉํ•ด์„œ state ๋ณ€๊ฒฝ
  let [ ๋”ฐ๋ด‰, ๋”ฐ๋ด‰๋ณ€๊ฒฝ ] = useState(0);
  return (
      <h4> { ๊ธ€์ œ๋ชฉ[0] } <span onClick={ ()=>{ ๋”ฐ๋ด‰๋ณ€๊ฒฝ(๋”ฐ๋ด‰ + 1) } } >๐Ÿ‘</span> { ๋”ฐ๋ด‰ }</h4>
  )
}


โœ๏ธ ๊ธ€ ์ˆ˜์ • ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ

// ์™„์„ฑ ์ฝ”๋“œ
function App(){
  
  let [๊ธ€์ œ๋ชฉ, ๊ธ€์ œ๋ชฉ๋ณ€๊ฒฝ] = useState( ['๋‚จ์ž์ฝ”ํŠธ ์ถ”์ฒœ', '๊ฐ•๋‚จ ์šฐ๋™๋ง›์ง‘', 'ํŒŒ์ด์ฌ ๋…ํ•™'] );  
  
  return (
    <button onClick={ ()=>{ 
      let copy = [...๊ธ€์ œ๋ชฉ];
      copy[0] = '์—ฌ์ž์ฝ”ํŠธ ์ถ”์ฒœ';
      ๊ธ€์ œ๋ชฉ๋ณ€๊ฒฝ(copy)
    } }> ์ˆ˜์ •๋ฒ„ํŠผ </button>
  )
}

1) state ๋ณ€๊ฒฝํ•จ์ˆ˜ ๋™์ž‘์›๋ฆฌ
- state ๋ณ€๊ฒฝํ•จ์ˆ˜๋ฅผ ์“ธ ๋•Œ ๊ธฐ์กด state === ์‹ ๊ทœ state ์ด๋ ‡๊ฒŒ ๋จผ์ € ๊ฒ€์‚ฌ
→ ๊ทธ๋ž˜์„œ ๊ฐ™์œผ๋ฉด state ๋ณ€๊ฒฝX

2) array/object ๋™์ž‘์›๋ฆฌ

-  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” array/object ์ž๋ฃŒ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๋ฉด ์ž๋ฃŒ๊ฐ€ ๋žจ์ด๋ผ๋Š” ๊ฐ€์ƒ๊ณต๊ฐ„์— ๋ชฐ๋ž˜ ์ €์žฅ๋˜๊ณ  ๋ณ€์ˆ˜์—๋Š” ๊ทธ ์ž๋ฃŒ๊ฐ€ ์–ด๋””์žˆ๋Š”์ง€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ™”์‚ดํ‘œ๋งŒ ๋‹ด๊ฒจ์žˆ๋‹ค.
- ์˜ˆ๋ฅผ ๋“ค์–ด์„œ let arr = [1,2,3] ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๋ฉด [1,2,3] ์ž๋ฃŒ๋Š” ๋žจ์ด๋ผ๋Š” ๊ฐ€์ƒ๊ณต๊ฐ„์— ๋ชฐ๋ž˜ ์ €์žฅ์ด ๋˜๊ณ  let arr ๋ณ€์ˆ˜์—” ๊ทธ ์ž๋ฃŒ๊ฐ€ ์–ด๋””์žˆ๋Š”์ง€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ™”์‚ดํ‘œ๋งŒ ๋‹ด๊ฒจ์žˆ์Œ!

- ๊ทธ๋ž˜์„œ array/object ์ž๋ฃŒ๋ฅผ ๋ณต์‚ฌํ•˜๋ฉด ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๊ฐ€ ์ž๋ฃŒ๊ฐ’์„ ๋ณ„๊ฐœ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋˜‘๊ฐ™์€ ๊ฐ’์„ ๊ณต์œ ํ•œ๋‹ค.
- ์˜ˆ๋ฅผ ๋“ค์–ด data1, data2๋ฅผ ์„ ์–ธํ–ˆ์„ ๋•Œ, data1์„ ๋ณ€๊ฒฝํ•˜๋ฉด data2๋„ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋จ.

๋”ฐ๋ผ์„œ ์ปดํ“จํ„ฐ๋Š” copy์™€ ๊ธฐ์กด ๊ธ€์ œ๋ชฉ state๋Š” ๋˜‘๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—(ํ™”์‚ดํ‘œ๊ฐ€ ๋˜‘๊ฐ™์•„์„œ) state ๋ณ€๊ฒฝ ์•ˆํ•ด์คŒ.

//state ๋ณ€๊ฒฝ ์•ˆ๋จ
let copy = ๊ธ€์ œ๋ชฉ;
copy[0] = '์—ฌ์ž์ฝ”ํŠธ ์ถ”์ฒœ';
๊ธ€์ œ๋ชฉ๋ณ€๊ฒฝ(copy)

// ๐Ÿ’ก์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋จ!
let copy = [...๊ธ€์ œ๋ชฉ];
copy[0] = '์—ฌ์ž์ฝ”ํŠธ ์ถ”์ฒœ';
๊ธ€์ œ๋ชฉ๋ณ€๊ฒฝ(copy)
๋”๋ณด๊ธฐ

"..."

spread operator ๋ผ๊ณ  ํ•˜๋Š” ๋ฌธ๋ฒ•์ธ๋ฐ array๋‚˜ object ์ž๋ฃŒํ˜• ์™ผ์ชฝ์— ๋ถ™์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ "๊ด„ํ˜ธ๋ฅผ ๋ฒ—๊ฒจ์ฃผ์„ธ์š”" ๋ผ๋Š” ๋œป.
→ ์˜ˆ๋ฅผ ๋“ค์–ด ...[1, 2, 3] ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ๊ทธ ์ž๋ฆฌ์— 1, 2, 3์ด ๋‚จ์Œ.

let data1 = [1,2,3];
let data2 = [...data1];
console.log(data1 === data2) //false ๋‚˜์˜ฌ๋“ฏ

๊ทธ๋ƒฅ data1์— ์žˆ๋˜ ์ž๋ฃŒ๋“ค์„ ๊ด„ํ˜ธ ๋ฒ—๊ธด ๋‹ค์Œ ๋‹ค์‹œ array๋กœ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”! ๋ผ๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด array๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™”์‚ดํ‘œ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํ™”์‚ดํ‘œ๊ฐ€ ๋‹ค๋ฅธ ์™„์ „ ๋…๋ฆฝ์ ์ธ array ๋ณต์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. (object ์ž๋ฃŒํ˜•๋„ ๋งˆ์ฐฌ๊ฐ€์ง€!)


๋ณธ ํฌ์ŠคํŒ…์€ << React ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ๊นŒ์ง€! >> ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค.