React์์ useState๋ฅผ ์ฌ์ฉํ ๋, ์ํ๊ฐ ๋ฐ๋ก ๋ฐ๋ ๊ฒ ๊ฐ์ง๋ง ์ค์ ๋ก๋ ์ฆ์ ๋ฐ์๋์ง ์๋๋ค!
ํนํ axios์ ํจ๊ป ์ฌ์ฉํ ๋๋ ๋ ํท๊ฐ๋ฆด ์ ์๋๋ฐ, ์ ๊ทธ๋ฐ์ง ์ฝ๊ฒ ์ค๋ช ํด๋ณผ๊ฒ.

const [count, setCount] = useState(0);
setCount(1);
console.log(count); // โ ์์: 1 โ โ ์ค์ : 0
setCount(1)์ ํ๋๋ฐ ์ console.log(count)๋ 0์ผ๊น?
๐ ์ด์ : setState๋ "์ํ ๋ณ๊ฒฝ์ ์์ฝ"๋ง ํ๊ณ , ๋ค์ ๋ฆฌ๋ ๋๋ง ๋ ๋ฐ์๋๊ธฐ ๋๋ฌธ!
axios๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๋น๋๊ธฐ ํจ์๋ผ์, ๋คํธ์ํฌ ์์ฒญ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํด!
๊ทธ๋์ axios ์์์ setState๋ฅผ ํ๋ฉด, ๋ฐ์ดํฐ๋ฅผ ๋ค ๋ฐ์ ํ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฑฐ์ผ.
const [data, setData] = useState(null);
useEffect(() => {
axios.get("https://api.example.com/data")
.then((res) => {
setData(res.data); // โ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ํ ์ํ ๋ณ๊ฒฝ
});
console.log(data); // โ ์ฌ์ ํ null (์ด์ ๊ฐ)
}, []);
setData(res.data);๋ฅผ ํ๋๋ฐ๋, console.log(data);๊ฐ null๋ก ์ฐํ๋ ์ด์ ๋?
๐ ์ด์ : axios๋ ๋น๋๊ธฐ ํจ์๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ๋ ์ ์ console.log๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ!
โ useEffect๋ฅผ ํ์ฉํด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ํ์ console.log๋ฅผ ์ฐ์ผ๋ฉด ํด๊ฒฐํ ์ ์์ด!
useEffect(() => {
console.log("๋ฐ์ดํฐ ๋ณ๊ฒฝ๋จ:", data);
}, [data]); // ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ฉด ์คํ๋จ!
์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ํ์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋๋ฏ๋ก, ์ํ๋ ๊ฐ์ ๋ณผ ์ ์์ด! ๐
useState๋ ์ํ๋ฅผ ๋ฐ๋ก ๋ณ๊ฒฝํ์ง ์๊ณ , ์์ฝ ํ ๋ฆฌ๋ ๋๋ง ๋ ๋ฐ์!
axios๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๋น๋๊ธฐ ํจ์๋ผ์, ๋ฐ์ดํฐ๋ฅผ ๋ค ๋ฐ์์ผ setState๊ฐ ์คํ๋จ.
๊ทธ๋์ axios ์์์ setState๋ฅผ ํ๋ฉด "๋น๋๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฒ์ฒ๋ผ" ๋ณด์ด์ง๋ง, ์ฌ์ค useState ์์ฒด๋ ํญ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํจ.
ํด๊ฒฐ ๋ฐฉ๋ฒ? useEffect๋ฅผ ํ์ฉํด์ ์ํ๊ฐ ๋ฐ๋ ํ์ ์ํ๋ ๊ฐ์ ํ์ธํ๋ฉด ๋๋ค!
useState๋ ๋น๋๊ธฐ์ฒ๋ผ ๋ณด์ผ ๋๊ฐ ์์ง๋ง, ์ฌ์ค "์์ฝ"๋ ํ ์ ๋ฐ์ดํธ๋๋ ๊ฒ์ผ ๋ฟ์ด๋ค!
https://seo0yoon.tistory.com/124
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋์ด๊ธฐ์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ ์ ๋ฐ์ ์๊ตฌ๋....