๐ Redux์์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ ๋, ์์๊ณผ ๋ค๋ฅด๊ฒ ์ด์ ๊ฐ์ด ๋ณด์ด๋ ์ด์ ๋ฅผ ์ ๋ฆฌํด๋ดค์ต๋๋ค.
useEffect(() => {
console.log("์ด ์ฝ๋๋ ์ฒ์ ํ ๋ฒ๋ง ์คํ๋จ!");
}, []); // โ
์์กด์ฑ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด([])๋ก ์ค์ ํ๋ฉด ์ต์ด ํ ๋ฒ๋ง ์คํ๋จ!
Redux์ ์ํ ๋ณ๊ฒฝ์ ์ฆ์ ๋ฐ์๋์ง ์๊ณ , ๋ค์ ๋ ๋๋ง ๋ ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ด์์!
React๋ ๋ ๋๋ง์ด ๋๋๊ธฐ ์ ๊น์ง ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์์์!
useEffect(() => {
console.log("userInfo ๋ณ๊ฒฝ๋จ:", userInfo);
}, [userInfo]); // โ
์ํ๊ฐ ๋ณ๊ฒฝ๋ ํ ์คํ๋๋๋ก ํจ!

dispatch({ type: "USER_INFO", payload: null });
setTimeout(() => {
console.log(userInfo); // โ
์ด์ ๋ณ๊ฒฝ๋ ๊ฐ์ด ์ถ๋ ฅ๋จ, ์ฆ์ ํธ์ถ
}, 0);
๐ ์ด ์ธ ๊ฐ๊ฐ ์๋ก ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์, ์ํ ๋ณ๊ฒฝ ์ ๋ถํ์ํ ์คํ์ ๋ง๋ ๊ฒ์ด ์ค์!
์ฌ๊ธฐ์ ๋ฐ์ userInfo ๋ฅผ ๋ฐฐ์ด ์์ ์์ฑํ๋ฉด userInfo ๊ฐ 2๋ฒ ์คํ์์ ๋๋ฉด์ 2๋ฒ ๋ก๊ทธ์์ ํด์ค์ผ ํ๋ค.
useEffect(() => {
const token = localStorage.getItem("token");
if (token) {
axios.get("/ping", { headers: { Authorization: token } })
.then(res => {
dispatch({
type: "USER_INFO",
payload: { userName: "์ฌ์ฉ์", role: "admin" }
});
})
.catch(err => {
localStorage.removeItem("token");
dispatch({ type: "USER_INFO", payload: null });
});
}
}, []); // โ
๋ถํ์ํ ์คํ์ ๋ง๊ธฐ ์ํด ๋น ๋ฐฐ์ด([]) ์ฌ์ฉ
1๏ธโฃ useEffect๋ ๋ ๋๋ง๋ ๋๋ง๋ค ์คํ๋๋ฏ๋ก, ๋ถํ์ํ ์คํ์ ๋ง์์ผ ํ๋ค!
2๏ธโฃ Redux ์ํ ๋ณ๊ฒฝ์ ์ฆ์ ๋ฐ์๋์ง ์์ผ๋ฏ๋ก, useEffect๋ setTimeout์ ํ์ฉํด์ผ ํ๋ค!
3๏ธโฃ localStorage, Redux, useEffect๊ฐ ์๋ก ์ํฅ์ ์ฃผ๋ฏ๋ก, ์์กด์ฑ ๋ฐฐ์ด์ ์ ์คํ๊ฒ ์ค์ ํด์ผ ํ๋ค!
์ด ๊ฐ๋ ์ ์ดํดํ๋ฉด React ์ํ ๊ด๋ฆฌ์ Redux ํ๋ฆ์ ๋ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์ด์! ๐๐ฅ