
๐ ์ฐธ๊ณ ์์ :
์ํ์ ์ฒ์ ๋ง๋ ๋ฆฌ์กํธ
๐ ์งํ
chapter 6 State์ ์๋ช ์ฃผ๊ธฐ โ
chapter 7 ํ โ
chapter 8 ์ด๋ฒคํธ ํธ๋ค๋ง โ
6. State์ ์๋ช ์ฃผ๊ธฐ
๐คState๋?
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์ํ,๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ
๐ก
๋ ๋๋ง์ด๋ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฌ์ฉ๋๋ ๊ฐ๋ง state์ ํฌํจ์์ผ์ผ ํ๋ค.
์? state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ ํ๋๋ค.
๋ฐ๋ผ์ ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ จ ์๋ ๊ฐ๋ง state์ ํฌํจํ๋๋ก ํ๋ฉฐ
๊ทธ ์ธ๋ ์ปดํฌ๋ํธ ์ธ์คํด์ค์ ํ๋๋ก ์ ์ํ๋ค
-ํน์ง
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด
state๋ฅผ ์์ฑ์์์ ์ ์ํ๋ค
์ง์ ์ ์ธ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค -> setState()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝํ๋ค.
์๋ช ์ฃผ๊ธฐ (ํด๋์ค ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ,Lifecycle method)
์ถ์(mount)-> ์ปดํฌ๋ํธ์ ์์ฑ์๊ฐ ์คํ๋๋ฉฐ state๋ฅผ ์ ์ํ๋ค, ๋ ๋๋ง๋๋ฉฐ ์ดํ componentDidMount() ํธ์ถ
์ธ์(update)->์ปดํฌ๋ํธ์ props๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ setState()ํจ์ ํธ์ถ์ ์ํด state๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋
,forceUpdate()๋ผ๋ ๊ฐ์ ์ ๋ฐ์ดํธ ํจ์์ ํธ์ถ๋ก ์ธํด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๋ค ๊ทธ๋ฆฌ๊ณ componentDidUpdate() ํธ์ถ
์ฌ๋ง(unmount)->์์ ์ปดํฌ๋ํธ์์ ํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ ์ด์ ํ๋ฉด์ ํ์ํ์ง ์๊ฒ ๋ ๋ , ์ด๋ componentWillUnmout()ํธ์ถ
์ปดํฌ๋ํธ๊ฐ ๊ณ์ ์กด์ฌํ๋ ๊ฒ์ด ์๋ ์๊ฐ์ ํ๋ฆ์๋ฐ๋ผ ์์ฑ,์ ๋ฐ์ดํธ๊ทธ๋ฆฌ๊ณ ์ฌ๋ผ์ง๋ค.
์ปดํฌ๋ํธ๋ prop์ด๋ผ๋ ์ ๋ ฅ๋ฐ์ดํฐ๊ฐ ์๊ณ ์ปดํฌ๋ํธ๊ฐ ์ด๊ฒ์ ์ฒ๋ฆฌํด return ๊ฐ์ ์ฒ๋ฆฌํฉ๋๋ค
prop์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ถ์๋ฅผ ์ํ ๋ฐ์ดํฐ
state๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๋ด๋ถ์๋ฅผ ์ํ ๋ฐ์ดํฐ
๊ฐ์ด ๋ฐ๋๋ฉด ์๋ก์ด ๊ฐ์ด ๋ฐ๊ปด์ ์ด๊ฒ์ด UI์ ๋ฐ์๋๊ฒํ๋๊ฒ ์ด๋
state๋ฅผ ์ฌ์ฉํฉ๋๋ค
useState()๋ ๋ฐฐ์ด์ ๋ฆฌํดํ๊ณ ,
0๋ฒ์จฐ ๊ฐ์ ์ํ์ ๊ฐ, 1๋ฒ์งธ ๊ฐ์ ํจ์๋ค
๊ทธ ์ํ์ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๋ ํจ์๋ค!
์ฐธ๊ณ : ์ํ์ฝ๋ฉ
7.ํ (Hook)
๋ฆฌ์กํธ์ state์ ์๋ช ์ฃผ๊ธฐ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ๋ฆฌ๋ฅผ ๊ฑธ์ด ์ํ๋ ์์ ์ ์ ํด์ง ํจ์๋ฅผ ์คํ๋๋๋ก ๋ง๋ ๊ฒ
useState()
state๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ
ํจ์ ์ปดํฌ๋ํธ์๋ state๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก ์ฌ์ฉํ๋ ค๋ฉด useState()ํ ์ ์ฌ์ฉํด์ผ ํ๋ค.
-์ฌ์ฉ๋ฒ
const [๋ณ์๋ช ,set๋ณ์๋ช ]=useState(์ด๊น๊ฐ);
useEffect()
์ฌ์ด๋ ์ดํฉํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ
์๋ช ์ฃผ๊ธฐ ํจ์๋ค๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ค.
*์ฌ์ด๋ ์ดํฉํธ: ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ฑฐ๋ ์๋์ผ๋ก DOM์ ๋ณ๊ฒฝํ๋ ์์
-์ฌ์ฉ๋ฒ
useEffect(()=>{
//์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ์ดํ,
//์์กด์ฑ ๋ฐฐ์ด์ ์๋ ๋ณ์๋ค ์ค ํ๋๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ์คํ๋จ
//์์กด์ฑ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ๋ง์ดํธ์ ์ธ๋ง์ดํธ ์์ ๋จ ํ ๋ฒ ์ฉ๋ง ์คํ๋จ
//์์กด์ฑ ๋ฐฐ์ด ์๋ต ์ ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ ์๋ง๋ค ์คํ๋จ
return()=>{
//์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋๊ธฐ ์ ์ ์คํ๋จ
}
},[์์กด์ฑ ๋ณ์1, ์์กด์ฑ ๋ณ์2,...]);
์์กด์ฑ ๋ฐฐ์ด ์์ ์๋ ๋ณ์ ์ค ํ๋๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์์๋, ์ดํํธ ํจ์ ์คํ
์์กด์ฑ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ๋ง์ดํธ,์ธ๋ง์ดํธ ์ ํ ๋ฒ๋ง ์คํ๋๋ค.
์์กด์ฑ ๋ฐฐ์ด ์๋ต์, ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ํธ์ถ
์ ์ธ๋ ์ปดํฌ๋ํธ์ props์ state์ ์ ๊ทผํ ์ ์๋ค.
๋ฆฌํดํ๋ ํจ์๋ ์ปดํฌ๋ํธ ๋ง์ดํธ๊ฐ ํด์ ๋ ๋ ํธ์ถ๋จ
useMemo()
useCallback()
useRef()
ํ ์ ๊ท์น
๋ฌด์กฐ๊ฑด ์ต์์ ๋ ๋ฒจ์์๋ง ํธ์ถํด์ผํ๋ค (๋ฐ๋ณต๋ฌธ,์กฐ๊ฑด๋ฌธ,์ค์ฒฉํจ์ ์์์ ํธ์ถํ๋ฉด ์๋จ)
์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋๋ง๋ค ๋งค๋ฒ ๊ฐ์ ์์๋ก ํธ์ถ๋์ด์ผ ํ๋ค.
๋ฆฌ์กํธ ํจ์ ์ปดํฌ๋ํธ์์๋ง ํ ์ ํธ์ถํด์ผํจ
์ปค์คํ ํ
์ด๋ฆ์ use๋ก ์์, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ ์ ๊ท์น ์๋ฐ ์ฌ๋ถ ์๋ํ์ธ ๋ถ๊ฐ๋ฅ
์ค๋ณต๋๋ ๋ก์ง์ ์ปค์คํ ํ์ผ๋ก ์ถ์ถํ์ฌ ์ฌ์ฌ์ฉ์ฑ ๋์ด๊ธฐ
์ค์ต์ฝ๋
import React,{useEffect, useState} from "react";
import useCounter from "./useCounter";
const MAX_CAPACITY=10;
function Accommodate(props){
const [isFull,setIsFull]=useState(false);
const [count,increaseCount,decreaseCount]=useCounter(0);
useEffect(()=>{
console.log("=====================")
console.log("useEffect() is called");
console.log(`isFull:${isFull}`);
});
useEffect(()=>{
setIsFull(count>=MAX_CAPACITY);
console.log(`Current count value:${count}`);
},[count]);
return(
<div style={{padding:16}}>
<p>{`์ด ${count}๋ช
์์ฉ์ค`}</p>
<button onClick={increaseCount} disabled={isFull}>์
์ฅ</button>
<button onClick={decreaseCount}>ํด์ฅ</button>
{isFull && <p style={{color:"red"}}>์ ์์ด ๊ฐ๋์ฐผ์ต๋๋ค.</p>}
</div>
);
}
export default Accommodate;
8. ์ด๋ฒคํธ ํธ๋ค๋ง
์ด๋ฒคํธ๋?
์ฌ์ฉ์๊ฐ ํ๋ฉด์์ ํ๋ ์ฌ๊ฑด์ ์๋ฏธ (ex. ๋ฒํผ ๋๋ฅด๊ธฐ,์ ๋ ฅ์ฐฝ์ ์ ๋ ฅํ๊ธฐ)
-์ฒ๋ฆฌ
DOM : ์ด๋ฒคํธ ์ด๋ฆ์ ๋ชจ๋ ์๋ฌธ์, ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ํจ์๋ฅผ ๋ฌธ์์ด๋ก ์ ๋ฌ
React: ์ด๋ฒคํธ ์ด๋ฆ์ ์นด๋ฉ ํ๊ธฐ๋ฒ,์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ํ ์๋ฅผ ๊ทธ๋๋ก ์ ๋ฌ
์ด๋ฒคํธ ํธ๋ค๋ฌ : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์
Arguments๋?
ํจ์์ ์ ๋ฌํ ๋ฐ์ดํฐ, ํ๋ผ๋ฏธํฐ ๋๋ ๋งค๊ฐ๋ณ์
-ํด๋์ค ์ปดํฌ๋ํธ
arrow function์ ์ฌ์ฉ ๋๋ bind์ฌ์ฉํ์ฌ ์ ๋ฌ
-ํจ์ ์ปดํฌ๋ํธ
์ด๋ฒคํธ ํธ๋ค๋ฌ ํธ์ถ ์ ์ํ๋ ์์๋๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๋ฃ์ด์ ์ฌ์ฉ
์ค์ต์ฝ๋
import React,{useState} from "react";
function ConfirmButton(props){
const [isConfirmed,setIsConfirmed]=useState(false);
const handleConfirm=()=>{
setIsConfirmed((prevIsConfirmed)=>!prevIsConfirmed);
};
return(
<button onClick={handleConfirm} disabled={isConfirmed}>
{isConfirmed?"ํ์ธ๋จ":"ํ์ธํ๊ธฐ"}
</button>
);
}
export default ConfirmButton;'๊ณต๋ถ ๊ธฐ๋ก โ๏ธ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [React] study (Context) #5์ผ์ฐจ (0) | 2023.04.15 |
|---|---|
| [React] study (์กฐ๊ฑด๋ถ๋ ๋๋ง) #4์ผ์ฐจ (0) | 2023.04.13 |
| [React] study (JSX,์๋ฆฌ๋จผํธ) #2์ผ์ฐจ (0) | 2023.04.11 |
| [React] study (๋ฆฌ์กํธ ์์ํ๊ธฐ) #1์ผ์ฐจ (0) | 2023.04.10 |
| [React] React study #0 (0) | 2023.04.10 |