Intro
์๋
ํ์ธ์. react hook useSelector ๋ฅผ ์ฌ์ฉํ๋ ๋์ค ์๋์ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
React Hook "useSelector" cannot be called inside a callback
function YourComponent() {
useEffect(() => {
useSelector((state: RootState) => state.code[SOME_DATA])
}, [])
}
Why?
react hook์ ์ฌ์ฉํ ๋๋ ์ค์ํ 2๊ฐ์ง ๊ท์น์ด ์์ต๋๋ค.
1๏ธโฃ Only Call Hooks at the Top Level
๋ฃจํ ์กฐ๊ฑด ๋๋ ์ค์ฒฉ๋ ํจ์ ๋ด์์ Hooks๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ํญ์ React ํจ์์ Top Level์์ Hooks๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ๊ท์น์ ๋ฐ๋ฅด๋ฉด Component๊ฐ ๋ ๋๋ง๋ ๋๋ง๋ค Hoooks์ด ๋์ผํ ์์๋ก ํธ์ถ๋ฉ๋๋ค.
2๏ธโฃ Only Call Hooks from React Functions
์ผ๋ฐ JavaScript Function์์ Hooks๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
My Case
์ ๊ฒฝ์ฐ ํด๋น ๊ท์น์ ์๋ฐํ๊ธฐ ๋๋ฌธ์ ๋ค์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋๋ค.
How to solve the problem
useSelector๋ฅผ ์ง์ useEffect ๋ฐ์์ ํธ์ถํ๊ณ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๋ค์์ useEffect ๋ด๋ถ์์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ ํ์์ต๋๋ค. useSelector๊ฐ useEffect ๋ด๋ถ์์ ์ง์ ํธ์ถ๋๋ ๊ฒ์ด ์๋๋ผ, someData๋ผ๋ ๋ณ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ํ useEffect ๋ด์์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ React Hook ๊ท์น์ ์ค์ํ๊ฒ ๋ฉ๋๋ค :)
function YourComponent() {
const someData = useSelector((state: RootState) => state.code[SOME_DATA]);
useEffect(() => {
// ์: console.log(someData);
}, [someData]);
// ๋๋จธ์ง ์ปดํฌ๋ํธ ์ฝ๋...
}