[๐Ÿ’ŽReact] state, component, map

h-a-n-aยท2023๋…„ 3์›” 3์ผ
2

๐Ÿ’ŽReact

๋ชฉ๋ก ๋ณด๊ธฐ
3/14

state

array, object state ๋ณ€๊ฒฝํ•˜๋Š” ๋ฒ•

import {useState} from 'react}

function App(){
	let [์ปคํ”ผ,์ปคํ”ผ๋ณ€๊ฒฝ]=useState(['์•„๋ฉ”๋ฆฌ์นด๋…ธ','์นดํŽ˜๋ผ๋–ผ'])
    
    return (
    <>
    <button onClick={()=>{์ปคํ”ผ๋ณ€๊ฒฝ(['๋…น์ฐจ๋ผ๋–ผ','๋ฐ”๋‹๋ผ๋ผ๋–ผ'])}}>์ปคํ”ผ๋ณ€๊ฒฝ๋ฒ„ํŠผ</button>
    <h4>{์ปคํ”ผ[0]}</h4>
    <h4>{์ปคํ”ผ[1]}</h4>
    </>

๋Š” ๋ณ€๊ฒฝํ•  ํ•ญ๋ชฉ์ด 2๊ฐœ๋‹ˆ๊นŒ ๋ง์ •์ด์ง€, 100๋งŒ๊ฐœ์˜€์œผ๋ฉด ๋ณ€๊ฒฝ๋  state ์ ํžŒ ๋ฐฐ์—ด ์ ๋Š๋ผ ๋‚ด ์†๋ชฉ์ด ๋จผ์ € ๋งํ•  ๊ฒƒ์ด๋‹ค.
๋ฆฌ์•กํŠธ๋Š” ๋ Œ๋”๋ง์„ ํ•  ๋•Œ ์–•์€ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์ฐธ์กฐ๊ฐ’์ด ๋ณ€ํ•จ์„ ๋ด„) ๋…€์„์ธ๋ฐ ์šฐ๋ฆฌ๊ฐ€ ์ปคํ”ผ[0]='๋…น์ฐจ๋ผ๋–ผ'๋ผ๊ณ  ์ ๋Š”๋‹ค๊ณ  ํ•ด๋„ '์ด์ „์ด๋ž‘ ์ง€๊ธˆ์ด๋ž‘ ๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฑด๋ฐ..?' ๊ฐธ์šฐ๋šฑ๊ฑฐ๋ฆฌ๋ฉฐ ์žฌ๋ Œ๋”๋งํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค.
๊ทธ๋ž˜์„œ [...]๋ฅผ ์ด์šฉํ•ด ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด๋‚ธ๋‹ค.

function App(){
let [์ปคํ”ผ,์ปคํ”ผ๋ณ€๊ฒฝ]=useState(['์•„๋ฉ”๋ฆฌ์นด๋…ธ','๋…น์ฐจ๋ผ๋–ผ','๋ฒ„๋ธ”ํ‹ฐ'])

return(
<>
<button onClick={()=>{
  let copy = [...์ปคํ”ผ]
  copy[0]='ํ—ค์ด์ฆ๋„›๋ผ๋–ผ'
  ์ปคํ”ผ๋ณ€๊ฒฝ(copy)
  //์ปคํ”ผ๋ณ€๊ฒฝ์˜ ()์•ˆ์—๋Š” ๋ณ€๊ฒฝํ•  state๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค
  //์ปคํ”ผ๊ฐ€ ์•„๋‹ˆ๋ผ ์ด์ œ ๋ฐ”๋€ copy๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๊ฒ ์ง€!!?
}}>์ปคํ”ผ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๋ฒ„ํŠผ</button>
<h4>{์ปคํ”ผ[0]}</h4>
</>

๊ฒฐ๋ก : react์—์„œ ๋ฐฐ์—ด/๊ฐ์ฒด ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋…๋ฆฝ์ ์ธ [...๋ฐฐ์—ด] {...๊ฐ์ฒด} ์นดํ”ผ๋ณธ์„ ๋งŒ๋“ค์–ด์„œ ์ˆ˜์ •ํ•˜๊ธฐ

component

๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ธธ๊ณ  ๊ธด html ์„ ํ•œ ๋‹จ์–ด๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค
์˜ˆ๋ฅผ ๋“ค์–ด

  • ์‚ฌ์ดํŠธ์—์„œ ๋ฐ˜๋ณตํ•ด์„œ ์ถœ์—ฐํ•˜๋Š” HTML ๋ฉ์–ด๋ฆฌ๋“ค
  • ๋‚ด์šฉ์ด ์ž์ฃผ ๋ณ€๊ฒฝ๋  ๊ฒƒ ๊ฐ™์€ Html ๋ถ€๋ถ„๋“ค
  • ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ํŽ˜์ด์ง€์˜ html ๋‚ด์šฉ์„ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค๊ธฐ

๋ฐฉ๋ฒ•

  1. function App ์™ธ๋ถ€์—์„œ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์ž‘๋ช…ํ•œ๋‹ค.
    (์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๋˜๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋Š” ์—†๋‹ค)
  2. ๊ทธ ํ•จ์ˆ˜ ์•ˆ์— return() ์•ˆ์— ์ถ•์•ฝํ•˜๊ณ  ์‹ถ์€ html ๋‹ด๊ธฐ
  3. function App ๋‚ด๋ถ€ ์›ํ•˜๋Š” ๊ณณ์—์„œ <ํ•จ์ˆ˜๋ช…></ํ•จ์ˆ˜๋ช…> ์‚ฌ์šฉํ•˜๊ธฐ

state์ด์šฉํ•ด์„œ ๋™์ ์ธ UI๋งŒ๋“ค๊ธฐ(๋ชจ๋‹ฌ์ฐฝ,ํƒญ,์„œ๋ธŒ๋ฉ”๋‰ด,ํˆดํŒ ๋“ฑ๋“ฑ)
1. html, css๋กœ ๋ฏธ๋ฆฌ UI ๋””์ž์ธ ํ•ด๋‘๊ธฐ
2. UI ํ˜„์žฌ ์ƒํƒœ๋ฅผ state๋กœ ์ €์žฅํ•ด๋‘๊ธฐ
3. state์— ๋”ฐ๋ผ์„œ UI๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ž‘์„ฑ
๋‹จ, JSX์—์„œ๋Š” if/else๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋‹ˆ ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•˜๊ธฐ!
์กฐ๊ฑด์‹?์ฐธ์ผ๋•Œ ์‹คํ–‰๋  ์ฝ”๋“œ:๊ฑฐ์ง“์ผ๋•Œ ์‹คํ–‰๋  ์ฝ”๋“œ

์—ฐ์Šต

function App(){
let [modal,setModal]=useState(false)
return(
<>
<button onClick={()=>{setModal(true)}}></button>
{
modal == true? <Modal> :null
}
</>
}
function Modal(){
return(
 <div>
 <h4>๋ชจ๋‹ฌ์ž…๋‹ˆ๋‹ค</h4>
 </div>
)
}

๋ฒ„ํŠผ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ํ† ๊ธ€์ฒ˜๋Ÿผ ๋ชจ๋‹ฌ์ฐฝ ๋ณด์˜€๋‹ค๊ฐ€ ์•ˆ๋ณด์˜€๋‹ค ํ•˜๊ณ  ์‹ถ์œผ๋ฉด

<button onClick={()=>{setModal(true)}}>๋ฉด
๋ฒ„ํŠผ ๋ˆ„๋ฅผ๋•Œ ๊ณ„์† modal state๊ฐ€ true์ธ๊ฑด๋ฐ
๋‚˜๋Š” true -> !true
false -> !false
๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์€๊ฑฐ๋‹ˆ๊นŒ
setModal(!modal)๋กœ ๋ฐ”๊ฟ”์คฌ๋‹ค.

map

๋˜‘๊ฐ™์€ html ์ƒ์„ฑํ•˜๋Š” ๋˜๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” map()์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
์•ˆํƒ€๊น๊ฒŒ๋„ ๋ฐ˜๋ณต๋ฌธ์€ JSX์—์„œ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์„œ ์ด๋ฒˆ๊ธฐํšŒ์— map()์„ ์จ๋ณด๋„๋ก ํ•˜์ž!

map?

ํ‚น์ œ๋„ˆ๋Ÿด mdn์—์„œ map()์„ ์ฐพ์•„๋ณด๋ฉด
map()๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•˜์—ฌ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.๋ผ๊ณ  ์นœ์ ˆํžˆ ์„ค๋ช…ํ•ด์ค€๋‹ค.

์ธ์ˆ˜

arr.map(callbackํ•จ์ˆ˜(a,i))
a ๋Š” ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ
i ๋Š” ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค
์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์˜ค๋Š˜ ๋‹น์žฅ์€ ์“ธ ์ผ์ด ์—†์–ด์„œ ์ผ๋‹จ ์ƒ๋žต.

๋ฐ˜ํ™˜๊ฐ’

๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•œ callback ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์€ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ return ํ•ด์ค€๋‹ค

์—ฐ์Šต

function App(){
let [์ปคํ”ผ, ์ปคํ”ผ๋ณ€๊ฒฝ] = useState(["์•„๋ฉ”๋ฆฌ์นด๋…ธ", "๊ฐ€ํŽ˜๋ผ๋–ผ", "๋…น์ฐจ๋ผ๋–ผ"]);
return
์ปคํ”ผ.map(function(a){
 return(
 <div key={i}> //๋ฆฌ์•กํŠธ๊ฐ€ <div>๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ ‡๊ฒŒ ์ ์–ด์คŒ
 <h4>{a}</h4>
 </div>)
 )
 }


(๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ์žˆ์œผ๋‹ˆ๊นŒ ๋ฌด์Šจ ํ•œ๊ธ€๋ฌธ์„œ์— ์“ด ๊ฑฐ ๊ฐ™๋„ค..ใ… ใ… ....ํ™”๋ฉด๋ Œ๋”๋ง ํ•œ๊ฑด๋ฐ!!!!!)

์•„๋ฌดํŠผ ์ด๋ฒˆ์—” ์ปคํ”ผ๋ฉ”๋‰ด๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ธ€์ž ์˜†์— ์ข‹์•„์š”๊ฐ€ 0์—์„œ 1์”ฉ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค.
let [์ข‹์•„์š”, ์ข‹์•„์š”๋ณ€๊ฒฝ]=useState(0) let [์ข‹์•„์š”1, ์ข‹์•„์š”๋ณ€๊ฒฝ1]=useState(0) let [์ข‹์•„์š”2, ์ข‹์•„์š”๋ณ€๊ฒฝ2]=useState(0)
๋ญ ์ด๋ ‡๊ฒŒ ๊ฐ ๋ฉ”๋‰ด๋งˆ๋‹ค state๋ฅผ ๋งŒ๋“ค์–ด์ค„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋งŒ์•ฝ์— ๋ฉ”๋‰ด๊ฐ€ 100๊ฐœ์˜€๋‹ค๋ฉด...?
๋‚ด ์†๋ชฉ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด map ํ•จ์ˆ˜๋ฅผ ์จ๋ณด๊ฒ ๋‹ค.

function App(){
let [์ปคํ”ผ, ์ปคํ”ผ๋ณ€๊ฒฝ] = useState(["์•„๋ฉ”๋ฆฌ์นด๋…ธ", "๊ฐ€ํŽ˜๋ผ๋–ผ", "๋…น์ฐจ๋ผ๋–ผ"]);
let [์ข‹์•„์š”, ์ข‹์•„์š”๋ณ€๊ฒฝ]=useState([0,0,0])
return
{
์ปคํ”ผ.map(function(a,i){
 return(
 <div>
 <h4 onClick={()=>{
	let copy=[...์ข‹์•„์š”]
    copy[i]=์ข‹์•„์š”[i]+1
    ์ข‹์•„์š”๋ณ€๊ฒฝ(copy)}}>{a}</h4>
 <span>{์ข‹์•„์š”[i]}</span>
 </div>)
 )
 }
 }


๋‹ค์‹œ ํ•œ๋ฒˆ ๋งํ•˜์ง€๋งŒ, ํ•œ๊ธ€ ๋ฌธ์„œ ์•„๋‹ˆ๋‹ค...ใ… ใ… ์ด๊ฑฐ ๋‚ด๊ฐ€ ํด๋ฆญํ• ๋•Œ๋งˆ๋‹ค ๋ฐ”๋€Œ๋Š”๋ฐ ๋™์˜์ƒ ์ฒจ๋ถ€๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฑธ๊นŒ? ์ด๊ฒƒ๋„ ํ•œ๋ฒˆ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.


  • ์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ
    ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ณ ๋‚˜์„œ return()์•ˆ์“ฐ๊ณ  App()์—์„œ ๊ณ„์† ๋ถˆ๋ €๋Š”๋ฐ ์•ˆ ๋ถˆ๋Ÿฌ์ ธ์„œ 30๋ถ„๋™์•ˆ ํ—ค๋งธ๋‹ค. ์ด์ œ ์ปดํฌ๋„ŒํŠธ ์“ฐ๊ณ ๋‚˜๋ฉด return()์€ ์ ˆ๋Œ€ ์•ˆ ๊นŒ๋จน์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์˜ค๋Š˜ ๊ถ๊ธˆํ–ˆ๊ฑฐ๋‚˜ ๋” ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ
    array, object๊ฐ™์ด ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋“ค์˜ ์–•์€ ๋ณต์‚ฌ/ ๊นŠ์€ ๋ณต์‚ฌ์— ๋Œ€ํ•ด ๋” ์•Œ๋ฉด ์žฌ๋ฐŒ์„ ๊ฒƒ ๊ฐ™๋‹ค.
    onClick={}์•ˆ์— ์ด๋ฒคํŠธ 2๊ฐœ ๋„ฃ๊ณ  ์‹ถ์€๋ฐ ํ•œ๊ฐœ๋ฐ–์— ์•ˆ ๋„ฃ์–ด์ง„๋‹ค. ์•„๋ฉ”๋ฆฌ์นด๋…ธ ๊ธ€์ž ๋ˆŒ๋ €์„๋•Œ sort()์จ์„œ ใ„ฑใ„ดใ„ท์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ฒŒ ํ•˜๋Š” ํ•จ์ˆ˜๋„ ๋งŒ๋“ค์–ด๋†จ๋Š”๋ฐ ๊ทธ๊ฑด ์ ์šฉ์ด ์™œ ์•ˆ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ด๊ฒƒ๋„ ๋‚ด์ผ ํ•ด๊ฒฐํ•ด๋†”์•ผ์ง€.
  • ์˜ค๋Š˜์˜ ์ผ๊ธฐ
    ์•„ ์ง„์งœ์ง„์งœ ํ•˜๊ธฐ ์‹ซ์€๋ฐ, ์ฝ”๋“œ ํ•ด๊ฒฐ๋˜๋ฉด ๋„ˆ๋ฌด๋„ˆ๋ฌด ๊ธฐ์˜๋‹ค. ์ž‘๊ณ  ์†Œ์ค‘ํ•œ ๋‚ด ์ฝ”๋“œ~!~!

profile
ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ์—ฐ์Šต์ด๋‹ˆ ๋‚ด์ผ์€ ๋” ๊ฐ•ํ•ด์งˆ ๊ฒ๋‹ˆ๋‹ค

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