์ปดํฌ๋ํธ๊ฐ ํ์๋๊ณ ์ฌ๋ผ์ง๋ ์๊ฐ๊น์ง์ ํ๋์ ์๋ช ์ฃผ๊ธฐ.
mount: ์ปดํฌ๋ํธ๊ฐ ํ์๋ ๋
->update : ์ปดํฌ๋ํธ ๋ด๋ถ ์์๊ฐ ์
๋ฐ์ดํธ๋ ๋
-> unmount : ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ผ์ง ๋
useEffect๋ ์์ ์ธ ์์ ์ค ํ๋๋ฅผ ๊ณจ๋ผ์, ํด๋น ์์ ์ ํน์ ํ ํจ์๊ฐ ์คํ๋๋๋ก ํ๋ Hook์ด๋ค.
ํฌ๊ฒ ๋ณด๋ฉด ๋ค์ ๋ ๊ฐ์ง๋ก ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ผ, ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.
1. ์๋จ์์ import {useEffect} from 'react'
2. ์ฝ๋ฐฑํจ์
์ถ๊ฐํด์ ์์ ์ฝ๋ ์ ์ผ๋ฉด, ์ปดํฌ๋ํธ๊ฐ mount& update ๋ ๋๋ง๋ค ์คํ๋จ
import {useEffect,useState} from 'react'
function App(){
useEffect(()=>{console.log(111)})
let [count,setCount]=useState(0)
return(
<div>
<Hi/>
<button onClick={()=>{setCount(count+1)}}>๋ฒํผ</button>
</div>
)
}
function Hi(){
return(
<>
<h4>์๋
!</h4>
</>
)
}
ํ์ด์ง ๋ก๋๋ ๋๋ ๋ฒํผ ํด๋ฆญํ ๋๋ ์ฝ์์ฐฝ์ ์ด์ฌํ 111
์ด ์ถ๋ ฅ๋๋ค.
๊ทผ๋ฐ ๊ทธ๋ฅ ์ด๋ฐ ๊ธฐ๋ฅ๋ง ๋๋๊ฑฐ๋ผ๋ฉด ๊ตณ์ด useEffect ์์ ์ ๋ ๊ฒ์ ์ฅ์ ์ ์ ๋ชจ๋ฅด๊ฒ ๋ค. ๊ทธ๋ฅ useEffect()๋ฐ์ ์ ์ด๋ ๋์ง ์๋? ๋ผ๋ ์๊ตฌ์ฌ์ด ๋ค๋, ์๊ฒ ๋ ์ฌ์ค.
๋ฐ๋ก useEffect ์์ ์ ์ ์ฝ๋๋ HTML์ด ๋ ๋๋ง๋ ์ดํ์ ๋์ํ๋ค
๋ ๊ฒ!
์ฌ๊ธฐ์ ์ useEffect๋ผ๊ณ ์๋ช
ํ๋์ง๋ ์๋ฉด ๋์์ด ๋๋๋ฐ,
ํจ์ ์์ ํต์ฌ๊ธฐ๋ฅ ์ธ์ ์ธ๋ฐ์๋ ๊ธฐ๋ฅ๋ค์ ํ๋ก๊ทธ๋๋ฐ ์ฉ์ด๋ก side Effect๋ผ๊ณ ํ๋ค. useEffect๋ ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ปดํฌ๋ํธ์ ํต์ฌ๊ธฐ๋ฅ์ html ๋ ๋๋ง์ด๊ธฐ์, ์ด ์ธ ์ธ๋ฐ์๋ ๊ธฐ๋ฅ๋ค์ ๋ค useEffect์์ ์ง์ด๋ฃ์ผ๋ผ๋ ๊ฒ์ด๋ค.
๋ฐ๋ณต์ฐ์ฐ, ์๋ฒ์์ ๋ฐ์ดํฐ๊ฐ์ ธ์ค๋ ์์
, ํ์ด๋จธ
์ด๋ฐ๊ฑด useEffect์์ ์ ์ฅ!
useEffect(์ปดํฌ๋ํธ๊ฐ ํ์๋ ๋ ์คํํ ํจ์,[])
useEffect(์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ์ ์ ์ ์์๋ค์ด ์ ๋ฐ์ดํธ๋๋ ์์ ์ ์คํํ ํจ์,[์ ๋ฐ์ดํธ๋๋์ง ์ง์ผ๋ณผ ๋ณ์/State])
useEffect(()=>{return ()=> ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ผ์ง ๋ ์คํํ ํจ์})
// mountํน์ update ๋ ๋๋ง๋ค ์คํ
useEffect(() => {
setTimeout(() => {
setBox(false);
}, 2000);
});
//์ต์ด mount๋ ๋ ์ฌ์ ํ ์คํ๋จ, but ์ดํ []์๊ฐ์ด ๋ฌ๋ผ์ง๋๋ง ๋ ๋๋ง!
useEffect(() => {
setTimeout(() => {
setBox(false);
}, 2000);
}, []);
useEffect()์ ๋์งธ ํ๋ผ๋ฏธํฐ๋ก []
์ ๋ฃ์ ์ ์๋๋ฐ(์ ๋ฌธ์ฉ์ด๋ก Dependency) ๋ณ์๋ state๋ฑ์ ๋ฃ์ ์ ์๋ค. ์ด์
[]์์ ๋ณ์๋ state๊ฐ ๋ณํ ๋๋ง useEffect์์ ์ฝ๋๋ฅผ ์คํ
ํด์ค. ์ฐธ๊ณ ๋ก, ์ฌ๋ฌ๊ฐ์ state ๋ฃ์ด๋ ์๊ด์๋ค!
๋ง์ฝ []
์์ ์๋ฌด๊ฒ๋ ๋ฃ์ง ์์ผ๋ฉด mountํ ๋๋ง(ํ์ด์ง ๋ก๋ํ ๋๋ง) ๋ฑ 1ํ ์คํ๋๊ณ ์ดํ๋ก๋ ์คํ๋์ง ์๋๋ค.
useEffect ๋์ํ๊ธฐ ์ ์ ํน์ ์ฝ๋๋ฅผ ์คํ
ํ๊ณ ์ถ์ผ๋ฉด return ()=>{} ์์ ๋ฃ์ ์ ์๋ค. mount๋๋ง๋ค ํ์ด๋จธ๋ฅผ ๋ง๋ค์ด๋ด๊ณ ์์ผ๋ ๋ช ๋ฐฑ๊ฐ๊ฐ ์์ด๊ธฐ๋ ํด ๋ฒ๊ทธ๋ฅผ ๋ฏธ์ฐ์ ๋ฐฉ์งํ๊ณ ์, ํ์ด๋จธ ๋ง๋ค๊ธฐ ์ ๊ธฐ์กด ํ์ด๋จธ๋ ์ ๊ฑฐํด์ฃผ์ธ์ ๋ผ๋ ์๋ฏธ์์ return()=>{}์์ ์ฝ๋๋ฅผ ์ง๊ธฐ๋ ํ๋ค. ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ [] ๊น์ง ์จ์ฃผ๋ฉด ๊ธ์์ฒจํ!
function App(){
let a=setTimeout(()=>{
console.log(1)},2000)
useEffect(()=>{
a;
return ()=>{
clearTimeout(a)
}
},[])
return(
<div>
<Hi/>
</div>
)
์ฐธ๊ณ ์๋ฃ:
์ ํ์ฝ๋ฉ
์ ํ๋ธ ๋ณ์ฝ๋ฉ