Frontend ๐Ÿ“š/React

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

leejaejae 2023. 10. 14. 16:23

โœ๏ธ ๋ฒˆ์™ธ) fragment ๋ฌธ๋ฒ•

return(
  <div>
    <div></div>
    <div></div>
  </div>
)

- HTML ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ, return() ๋‚ด๋ถ€๋Š” ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ์‹œ์ž‘ํ•ด์„œ ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ๋๋‚˜์•ผ ํ•จ!
- ๊ทธ๋ž˜์„œ ๊ตณ์ด <div> ๋‘๊ฐœ๋ฅผ ๋‚˜๋ž€ํžˆ ์ ๊ณ  ์‹ถ์œผ๋ฉด ์œ„์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ div๋กœ ๋˜ ๊ฐ์‹ธ๊ฑฐ๋‚˜, <></>๋กœ ๊ฐ์‹ธ์•ผ ํ•จ!

 

โœ๏ธ Component

- ๊ธด HTML์„ ํ•œ ๋‹จ์–ด๋กœ ๊น”๋”ํ•˜๊ฒŒ ์น˜ํ™˜ํ•ด์„œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•

function App (){
  return (
    <div>
      (์ƒ๋žต)
      <Modal></Modal>
    </div>
  )
}

function Modal(){
  return (
    <div className="modal">
      <h4>์ œ๋ชฉ</h4>
      <p>๋‚ ์งœ</p>
      <p>์ƒ์„ธ๋‚ด์šฉ</p>
    </div>
  )
}

1) ์ค„์ด๋Š” ๋ฒ•
   1. function์„ ์ด์šฉํ•ด ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ์ž‘๋ช….
   2. ๊ทธ ํ•จ์ˆ˜ ์•ˆ์— return() ์•ˆ์— ์ถ•์•ฝ์„ ์›ํ•˜๋Š” HTML ๋‹ด์Œ.
   3. ๊ทธ๋Ÿผ ์›ํ•˜๋Š” ๊ณณ์—์„œ <ํ•จ์ˆ˜๋ช…></ํ•จ์ˆ˜๋ช…> ์‚ฌ์šฉํ•˜๋ฉด ์•„๊นŒ ์ถ•์•ฝํ•œ HTML ๋“ฑ์žฅ.

- ์ด๋ ‡๊ฒŒ ์ถ•์•ฝํ•œ HTML ๋ฉ์–ด๋ฆฌ๋ฅผ Component๋ผ๊ณ  ๋ถ€๋ฆ„!

2) Component ๋งŒ๋“ค ๋•Œ ์ฃผ์˜์ 
- component ์ž‘๋ช…ํ•  ๋• ์˜์–ด ๋Œ€๋ฌธ์ž๋กœ ๋ณดํ†ต ์ž‘๋ช…
- return() ์•ˆ์— HTML ํƒœ๊ทธ๋“ค์ด ํ‰ํ–‰ํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ ๋“ค์–ด๊ฐˆ ์ˆ˜ X
- function App(){} ๋‚ด๋ถ€์—์„œ ๋งŒ๋“ค๋ฉด X
- <์ปดํฌ๋„ŒํŠธ></์ปดํฌ๋„ŒํŠธ> ๋˜๋Š” <์ปดํฌ๋„ŒํŠธ/>

3) ์–ด๋–ค HTML๋“ค์„ Component๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ์ข‹์„๊นŒ
- ์‚ฌ์ดํŠธ์— ๋ฐ˜๋ณตํ•ด์„œ ์ถœํ˜„ํ•˜๋Š” HTML ๋ฉ์–ด๋ฆฌ๋“ค
- ๋‚ด์šฉ์ด ์ž์ฃผ ๋ณ€๊ฒฝ๋  ๊ฒƒ ๊ฐ™์€ HTML ๋ถ€๋ถ„
- ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ํŽ˜์ด์ง€์˜ HTML ๋‚ด์šฉ
- ๋‹ค๋ฅธ ํŒ€์›๊ณผ ํ˜‘์—…ํ•  ๋•Œ ์›นํŽ˜์ด์ง€๋ฅผ Component ๋‹จ์œ„๋กœ ๋‚˜์›Œ์„œ ์ž‘์—… ๋ถ„๋ฐฐ ๋“ฑ๋“ฑ..

4) Component์˜ ๋‹จ์ 
- Component๋ฅผ ์ˆ˜๋ฐฑ๊ฐœ ๋งŒ๋“ค๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›€, ๋„ˆ๋ฌด ์ชผ๊ฐœ์ง€ ๋ง๊ณ  ๊ผญ ํ•„์š”ํ•œ ๊ณณ๋งŒ Component๋กœ ์ชผ๊ฐœ ์‚ฌ์šฉํ•  ๊ฒƒ!

 

โœ๏ธ ๋™์ ์ธ UI ๋งŒ๋“œ๋Š” Step(๋ชจ๋‹ฌ์ฐฝ ๊ธฐ๋Šฅ)

step 1. html css ๋ฏธ๋ฆฌ ๋””์ž์ธํ•ด๋†“๊ธฐ.
step 2. UI์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ state๋กœ ์ €์žฅ.

let [modal, setModal] = useState(false);

- state๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ๊ฑฐ๊ธฐ์— ํ˜„์žฌ UI์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅ
step 3. state์— ๋”ฐ๋ผ UI๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€ ์ž‘์„ฑ.

function App (){

  let [modal, setModal] = useState(false);
  return (
    ์ € state๊ฐ€ true๋ฉด <Modal></Modal>
    false๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ณด์—ฌ์ฃผ์ง€๋งˆ์„ธ์š”
  )
}

- ์‚ผํ•ญ์—ฐ์‚ฐ์ž(if๋ฌธ๊ณผ ์—ญํ•  ๋น„์Šท) ์‚ฌ์šฉ
1) JSX์—์„œ ์กฐ๊ฑด๋ฌธ ์“ฐ๋Š” ๋ฒ•
- jsx์—์„œ๋Š” if ๋ฌธ๋ฒ• ๋Œ€์‹  ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•จ

// ์กฐ๊ฑด์‹ ? ์กฐ๊ฑด์‹ ์ฐธ์ผ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ : ์กฐ๊ฑด์‹ ๊ฑฐ์ง“์ผ ๋•Œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
3 > 1 ? console.log('๋งž์Œ') : console.log('์•„๋‹˜')


๐Ÿ’‍โ™€๏ธ ๊ธ€์ œ๋ชฉ ๋ˆ„๋ฅด๋ฉด ๋ชจ๋‹ฌ์ฐฝ ๋„์šฐ๊ธฐ

function App (){

  let [modal, setModal] = useState(false);
  return (
    <div>
      (์ƒ๋žต)
      <button onClick={ ()=>{ setModal(!modal) } }> {๊ธ€์ œ๋ชฉ[0]} </button>
      { 
         modal == true ? <Modal></Modal> : null
      }
    </div>
  )
}

- ๊ธ€์ œ๋ชฉ ํด๋ฆญ์‹œ ์ง€๊ธˆ state๊ฐ€ true๋ฉด setModal(false), false๋ฉด setModal(true)

 

โœ๏ธ JS map ํ•จ์ˆ˜

- JSX ์ค‘๊ด„ํ˜ธ ์•ˆ์—์„œ๋Š” for ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ๋Œ€์‹  map()์„ ์‚ฌ์šฉํ•œ๋‹ค!
๊ธฐ๋Šฅ 1. array์— ๋“ค์–ด์žˆ๋Š” ์ž๋ฃŒ ๊ฐฏ์ˆ˜๋งŒํผ ๊ทธ ์•ˆ์— ์žˆ๋Š” ์ฝ”๋“œ ๋ฐ˜๋ณต ์‹คํ–‰

var array1 = [2,3,4];
array1.map(function(){
  console.log(1)
});

// ๊ฒฐ๊ณผ
console.log(1)
console.log(1)
console.log(1)

๊ธฐ๋Šฅ 2. ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ํŒŒ๋ผ๋ฏธํ„ฐ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์ž‘๋ช…ํ•˜๋ฉด ๊ทธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ฐฐ์—ด ์•ˆ์— ์žˆ๋˜ ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅ(์†Œ๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ผ๊ณ  ํ•จ)

var array2 = [2,3,4];
array2.map(function(a){
  console.log(a)
});

// ๊ฒฐ๊ณผ
2, 3, 4

๊ธฐ๋Šฅ 3. return ์˜ค๋ฅธ์ชฝ์— ๋ญ ์ ์œผ๋ฉด array๋กœ ๋‹ด์•„์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  map() ์“ด ์ž๋ฆฌ์— ๋‚จ๊ฒจ ์คŒ!

var array3 = [2,3,4];
var newArray = array3.map(function(a){
  return a * 10
});
console.log(newArray)

// ๊ฒฐ๊ณผ
[20, 30, 40]

 

โœ๏ธ JSX ์•ˆ์—์„œ HTM์— map ํ•จ์ˆ˜ ์ ์šฉ

function App (){
  return (
    <div>
      { 
        [1,2,3].map(function(){
          return ( <div>์•ˆ๋…•</div> )
        }) 
      }
    </div>
  )
}

// ๊ฒฐ๊ณผ
<div>์•ˆ๋…•</div>
<div>์•ˆ๋…•</div>
<div>์•ˆ๋…•</div>

- ์šฐ์„  [1, 2, 3]์—๋‹ค๊ฐ€ map์„ ๋ถ™์˜€์œผ๋‹ˆ ๊ทธ ์•ˆ์˜ ์ž๋ฃŒ ๊ฐฏ์ˆ˜๋งŒํผ map ๋‚ด๋ถ€์— ์žˆ๋Š” return <div>์•ˆ๋…•</div> ์‹คํ–‰.
- <div>์•ˆ๋…•</div>๋ฅผ array์— 3๋ฒˆ ๋‹ด์•„์คŒ.( [ <div>์•ˆ๋…•</div>, <div>์•ˆ๋…•</div>, <div>์•ˆ๋…•</div> ] ์ด๋Ÿฐ ํ˜•ํƒœ )

โœ๏ธ ๊ธ€์ œ๋ชฉ 3๊ฐœ ๋ฐ˜๋ณต๋ฌธ ์ถ•์•ฝ

function App (){

  let [๋”ฐ๋ด‰, ๋”ฐ๋ด‰๋ณ€๊ฒฝ] = useState([0,0,0]);

  return (
    <div>
      (์ƒ๋žต)
      { 
        ๊ธ€์ œ๋ชฉ.map(function(a, i){
          return (
          <div className="list"key={i}>
            <h4> 
              { ๊ธ€์ œ๋ชฉ[i] } 
               <span onClick={()=>{ 
                  let copy = [...๋”ฐ๋ด‰];
                  copy[i] = copy[i] + 1;
                  ๋”ฐ๋ด‰๋ณ€๊ฒฝ(copy)  
               }}>๐Ÿ‘</span> {๋”ฐ๋ด‰[i]} 
            </h4> 
            <p>2์›” 18์ผ ๋ฐœํ–‰</p>
          </div> )
        }) 
      }
    </div>
  )
}

- function(a, i): ์ฒซ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ a๋Š” array ์•ˆ์— ์žˆ๋˜ ์ž๋ฃŒ, ๋‘˜์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” i๋Š” 0๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์ •์ˆ˜
- <div className="list" key={i}>: map ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ฐ˜๋ณต์ƒ์„ฑํ•œ html์—” key={i} ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด ๋ฆฌ์•กํŠธ๊ฐ€ <div>๋“ค์„ ๊ฐ๊ฐ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผํ•œ๋‹ค. (์—†์œผ๋ฉด ์›Œ๋‹ ๋„์›Œ์คŒ!)
- onClick() ๋‚ด๋ถ€ ์ฝ”๋“œ:
  - state๊ฐ€ array์ž๋ฃŒ์ด๋ฏ€๋กœ ๋ณต์‚ฌ ๋จผ์ €!
  - 0๋ฒˆ์งธ ์ข‹์•„์š” ๋ฒ„ํŠผ์„ ํด๋ฆญ์‹œ์—” ๋”ฐ๋ด‰[0] + 1, 1๋ฒˆ์งธ ์ข‹์•„์š” ๋ฒ„ํŠผ ํด๋ฆญ์‹œ์—” ๋”ฐ๋ณธ[1] + 1, 2๋ฒˆ์งธ ์ข‹์•„์š” ๋ฒ„ํŠผ ํด๋ฆญ์‹œ์—” ๋”ฐ๋ด‰[2] + 1


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