๐๏ธ๊ธฐ๋ก์ฉ Velogโ
โป ์์ธํ ์ค๋ช
์ ๊ตฌ๊ธ๋ง ๋ค๋ฅธ ๋ถ๋ค ์ฐธ๊ณ โ๏ธ
โ๏ธ React Hook
โ๏ธ ํด๋์คํ ์ปดํฌ๋ํธ์์ ๋ผ์ดํ ์ฌ์ดํด์ ์ฌ์ฉํ๋๋ฐ ํจ์ํ ์ปดํฌ๋ํธ์์๋ useEffect๋ฅผ ํตํด ๋ผ์ดํ ์ฌ์ดํด(๋ง์ดํธ,์
๋ฐ์ดํธ,์ธ๋ง์ดํธ) ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
โ๏ธ ๋ง์ดํธ-์ฒ์ ๋ ๋๋ง ์, ์
๋ฐ์ดํธ- ํน์ ๊ฐ ๋ณ๊ฒฝ ์, ์ธ๋ง์ดํธ-์ฌ์์ง๋/์ปดํฌ๋ํธ๋ฅผ ๋ ๋ ๋
โ๏ธ useEffect๋ html ๋ ๋๋ง ํ ์คํ
โ๏ธ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง, ๋ฆฌ๋ ๋๋ง, ๋ ๋ฒ์งธ ์ธ์ []์ ์ ์ธ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์คํ๋ฉ๋๋ค.
โ๏ธ ๋ ๋ฒ์งธ ์ธ์๋ก ๋ฐฐ์ด์ ๋ฐ๋๋ฐ ์ด ๋ฐฐ์ด์ Dependency Array๋ผ๊ณ ํฉ๋๋ค.
โ๏ธ useEffect ํ ์ ์ฌ์ฉํ๋ฉด ํจ์ํ ์ปดํฌ๋ํธ์์๋ side Effect๋ฅผ ์คํํ ์ ์๊ฒ ๋ฉ๋๋ค.
โ๏ธ useEffect๋ HTML ๋ ๋๋ง ํ ์คํ์ ํ๊ธฐ์ ๋ณต์กํ ์ฐ์ฐ์ ํ์ฌ ์ง์ฐ์ด ๋๋ ๊ฒฝ์ฐ html์ด ๋ณด์ด์ง ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด.
โ๏ธ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ
โ๏ธ ํน์ ๊ฐ ๋ณ๊ฒฝ ์ ๋์
โ๏ธ ์ต์ด ๋ ๋๋ง ์์๋ง ์คํํ ์ ์๋๋ก, ๋ฆฌ๋ ๋๋ง ์ ๋์โ
import {useEffect} from "react";
1. ์ด๊ธฐ ๋ ๋๋ง, ์ฌ๋ ๋๋ง ์ ์คํ ๐
useEffect(() => {
//์คํ ํจ์
console.log("useEffect");
});
2. dependency arry : ๋น ๋ฐฐ์ด ์ฒซ ๋ ๋๋ง์๋ง(mount) ์คํ ๐
useEffect(() => {
//์คํ ํจ์
console.log("useEffect");
},[]);
3. dependency arry : ์ต์ด ๋ ๋๋ง 1ํ ๋ฐ val ๊ฐ์ด ๋ณ๊ฒฝ ์ ์คํ ๐
useEffect(() => {
//์คํ ํจ์
console.log("useEffect");
},[val])
4. clean up : unmount ์ ์คํ(์ปดํฌ๋ํธ ์ญ์ ๋ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ ์ด๋) ๐
useEffect(() => {
//์คํ ํจ์
console.log("useEffect");
return () => {
console.log("clean up function");
};
});
useEffect(()=>{
console.log("useEffect");
})
โ๏ธ ์ด๊ธฐ ๋ ๋๋ง ๋ฐ ์ฌ๋ ๋๋ง ์ ์คํ์ ํ์ธํ๊ธฐ ์ํด
Count ์ํ๊ฐ์ ๋ณ๊ฒฝ์์ผ ๋ฆฌ๋ ๋๋ง!!
๐ ๊ฒฐ๊ณผ
โ๏ธ count ๋ณ๊ฒฝ ๋ฒํผ ํด๋ฆญ ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด ๋ฆฌ๋ ๋๋ง์ด ๋ฉ๋๋ค
๋ฆฌ๋ ๋๋ง์ด ๋ ๋๋ง๋ค useEffect๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํ์ธ!
โ๏ธ useEffect๋ html ๋ ๋๋ง ํ์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
์์ฐจ์ ์ผ๋ก ์์์ console.log("TEST"); ์คํ ํ html ๋ ๋๋ง ํ
useEffect๊ฐ ์คํ ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค!
useEffect(()=>{
console.log("useEffect");
},[])
โ๏ธ [] ๋น ๋ฐฐ์ด์ด ์ถ๊ฐ๋์ด ์ด๊ธฐ ๋ ๋๋ง ์์๋ง ๋์์ด ๋๊ณ
๋ฆฌ๋ ๋๋ง ์์๋ ์คํ์ด ๋์ง ์์ต๋๋ค.
๐๊ฒฐ๊ณผ
โ๏ธ useEffect๋ ์ด๊ธฐ ๋ ๋๋ง 1ํ๋ง ์คํํ๊ณ ๊ทธ ์ดํ count ๋ณ๊ฒฝ๋์ด ๋ฆฌ๋ ๋๋ง ์ ์ฌ์คํ๋์ง ์์์ต๋๋ค!useEffect(()=>{
console.log("useEffect");
},[ํน์ ๊ฐ])
โ๏ธ number๋ฅผ ์ถ๊ฐํ์ฌ useEffect์ ๋ ๋ฒ์งธ ์ธ์ ๋ฐฐ์ด์ number๋ฅผ ์ถ๊ฐํ์ฌ number ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ useEffect๊ฐ ์คํ ํ
์คํธ
โ๏ธ ํ์ธ์ ์ข ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํด count,number ํด๋ฆญ์ console์ ์ถ๊ฐํ์์ต๋๋ค!
๐๊ฒฐ๊ณผ
๋นจ๊ฐ์: ์ด๊ธฐ ๋ ๋๋ง : useEffect ์คํโญํ๋์: Count ๋ณ๊ฒฝ : useEffect ์คํโ
๋ผ์์: Number ๋ณ๊ฒฝ : useEffect ์คํโญ
โ๏ธ ์ด๊ธฐ 1ํ ํธ์ถ ๋ฐ dependency ๋ฐฐ์ด์ ์ ๋ ฅ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์คํ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค!
โ๏ธ useEffect ์คํ ๋๊ธฐ ์ ์ return ์์ ์๋ ํจ์๊ฐ ์คํ.
โ๏ธ mount ์ ์คํ โ / unmount ์ ์คํ โญ
โ๏ธ setTimeout, setInterval, ์ด๋ฒคํธ ์ถ๊ฐ ๋ฑ ์ค์ฒฉ์ผ๋ก ์คํ๋๋ ๊ฒ์ ๋ฐฉ์ง ๐ ์ฒญ์ํ๋ฏ ๊ธฐ์กด ์ฐ๊ฒฐ์ด ๋์ด ์๋ค๋ฉด ํด์ ์ํจ๋ค - ์ด๊ธฐํ
useEffect(()=>{
console.log("useEffect!");
return () => {
console.log("clean up!!")
}
},[])
โ๏ธclean up ์ฌ์ฉ์ ์ดํดํ๊ธฐ ์ํด ํ
์คํธ
โ๏ธ ์๋ฌด ์ด๋ฒคํธ ์๋ ๋ฒํผ์ number state ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ useEffect๊ฐ ์คํ๋์ด ์ถ๊ฐ๋ก click ์ด๋ฒคํธ๋ฅผ ๊ณ์ ์ถ๊ฐํ์ฌ ์ค๋ณต ๋ฐ์์ ๋ง๋ค์์ต๋๋ค.
๐๊ฒฐ๊ณผ
โ๏ธ ์ฒ์ React 2๋ฒ ์คํ์ผ๋ก ๋๋ฒ click ์ด๋ฒคํธ๊ฐ ์ถ๊ฐ ๋์๊ณ
์ดํ ๋นจ๊ฐ์ ์ซ์๋งํผ number ๋ณ๊ฒฝ โก๏ธ ๋ฆฌ๋ ๋๋ง โก๏ธuesEffect ์คํ
โ๏ธ click ๋ฒํผ ํ๋ฒ๋ง ํด๋ฆญํ์ ๋ฟ์ธ๋ฐ click ์ค๋ณต์ผ๋ก ์ถ๊ฐ๋๋ค ๋ณด๋
ํ๋์ ๋ฐ์ค์ฒ๋ผ ์ซ์๊ฐ ๋์ด๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค!
โ clean up ์ ํด๋ฆญ ์ด๋ฒคํธ remove!
๐๊ฒฐ๊ณผ
โ๏ธ clean up function์์ ์ด๋ฒคํธ๋ฅผ ์ญ์ ํ์ฌ ์ด๊ธฐ๋ก ๋ง๋ค์ด ์ฃผ์๊ธฐ์ ๋ฆฌ๋ ๋๋ง ์ click ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ์ฌ๋ ์ค๋ณต์คํ์ด ๋์ง ์์ต๋๋ค!!
โ setTimeout์ผ๋ก ํ ์คํธ๋ฅผ ์งํ ์ถ์ฒ๐
โ ๏ธ useEffect๋ฅผ ๋จ์ฉํ๊ฒ ๋๋ฉด side effect๊ฐ ์ปค์ ธ ์ ์ง ๋ณด์ ๋ฐ ์์์น ๋ชปํ ํธ์ถ์ด ๋ฐ์ํ ์ ์์ด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ๋์์ง๊ธฐ์ ๋จ์ฉ์ ํ์ง ์๋ ๊ฒ ์ข์ต๋๋ค!
๊ฐ์ฌํฉ๋๋ค. ๐