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์์ ๋ฐฐ์ด/๊ฐ์ฒด ์์ ํ๊ณ ์ถ์ผ๋ฉด ๋
๋ฆฝ์ ์ธ [...๋ฐฐ์ด] {...๊ฐ์ฒด}
์นดํผ๋ณธ์ ๋ง๋ค์ด์ ์์ ํ๊ธฐ
๋ฅผ ์ด์ฉํ๋ฉด ๊ธธ๊ณ ๊ธด html ์ ํ ๋จ์ด๋ก ์ค์ผ ์ ์๋ค
์๋ฅผ ๋ค์ด
- function App ์ธ๋ถ์์ ํจ์๋ฅผ ํ๋ ๋ง๋ค์ด์ฃผ๊ณ ์๋ช ํ๋ค.
(์ปดํฌ๋ํธ ์์์ ๋๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ์๋ ์๋ค)- ๊ทธ ํจ์ ์์ return() ์์ ์ถ์ฝํ๊ณ ์ถ์ html ๋ด๊ธฐ
- 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)
๋ก ๋ฐ๊ฟ์คฌ๋ค.
๋๊ฐ์ html ์์ฑํ๋ ๋๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ map()์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
์ํ๊น๊ฒ๋ ๋ฐ๋ณต๋ฌธ์ JSX์์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํด์ ์ด๋ฒ๊ธฐํ์ 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>)
)
}
}
๋ค์ ํ๋ฒ ๋งํ์ง๋ง, ํ๊ธ ๋ฌธ์ ์๋๋ค...ใ
ใ
์ด๊ฑฐ ๋ด๊ฐ ํด๋ฆญํ ๋๋ง๋ค ๋ฐ๋๋๋ฐ ๋์์ ์ฒจ๋ถ๋ ์ด๋ป๊ฒ ํ๋๊ฑธ๊น? ์ด๊ฒ๋ ํ๋ฒ ์์๋ด์ผ๊ฒ ๋ค.