๋ชฉ์ฐจ
์์ธ
์ฐ์ ํด๋น ์๋ฌ๋ useEffect์ ๊ด๋ จ์ด ์๋ค.
์์ธํ๊ฒ ์์ธ์ ํ์ ํ๊ธฐ ์ ์
์๋ง ์ด ๊ธ์ ๋ณด๊ฒ๋ ๋ถ๋ค์ด ํ ์ค์๋ ์๋์ 2๊ฐ์ง์ผ ํ๋ฅ ์ด ๋๋ค!
1. useEffect์์ ํจ์๊ฐ ์๋ ๋ค๋ฅธ ๊ฒ์ ๋ฐํ
2. useEffect(async()=>{},[])
2๊ฐ์ง ์ค์๋ ๋ชจ๋ useEffect์ ์๋ชป๋ ์ฌ์ฉ์ด๋ค.
ํด๊ฒฐ๋ฒ๊ณผ ์์ธํ ์ด์
- useEffect์์ ํจ์๊ฐ ์๋ ๋ค๋ฅธ ๊ฒ์ ๋ฐํํ๋ ๊ฒฝ์ฐ
before
useEffect(() => myFunction());
useEffect(() => { return myFunction() });
after
useEffect(() => { myFunction() });
์ด์
useEffect(() => {
์ดํํธ ํจ์
return {
ํด๋ฆฐ์
ํจ์
};
}, [์์กด๊ฐ]);
useEffect์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ ์์ ๊ฐ์๋ฐ
์ด๋ returnํ๋ ๊ฐ์ cleanup function(ํด๋ฆฐ์ ํจ์)์ด์ด์ผ ํ๋ค. (์๋๋ฉด undefined๊ฑฐ๋)
์ด ํจ์๋ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ์คํ์ด ๋๋ค.
useEffect(() => myFunction());
useEffect(() => { return myFunction() });
์์ ๊ฒฝ์ฐ์๋ ํจ์๊ฐ ๋ฐํํ ๊ฐ์ useEffect๊ฐ ๋ฐํํ๊ฒ ๋๋ค.
์ฆ, ํจ์๊ฐ ์๋ ๊ฒ์ ๋ฐํํ๋ฏ๋ก ์๋ชป๋ ์ฌ์ฉ์ด๋ค.
ํ์ง๋ง ์ ์ฝ๋๋ฅผ ์์ฑ์์ ์ง์ง ์๋๋
์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋(๋ง์ดํธ ๋ ๋) ์คํ๋๋ ์ดํํธํจ์๋ก ์ฌ์ฉํ๋ คํ์ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ ํํ ์๋๋ฅผ ๋ฐ์ํ๋ฉด ์๋์ฒ๋ผ ์ฌ์ฉํด์ผํ๋ค.
useEffect(() => { myFunction() });
- useEffect(async()=>{})
before
useEffect(async()=>{},[]);
after
useEffect(()=>{ myFunction() },[]);
const myFunction = async()=>{...};
์ด์
async ํค์๋๋ JS์์ ๋น๋๊ธฐ ํจ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค.
์ด๋ ์ค์ํ ์ ์ ๋น๋๊ธฐ ํจ์๋ ํญ์ Promise๋ฅผ ๋ฐํํ๋ค.
์ฆ, ์ด case๋ ์ญ์ ํจ์๊ฐ ์๋ ๋ค๋ฅธ ๊ฒ์ ๋ฐํํ๋ ค ์๋ํ ๊ฒฝ์ฐ์ด๋ค.
useEffect(async()=>{},[]);
์ฝ๋ ์์ฑ์์ ์ง์ง ์๋๋ ๋น๋๊ธฐ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก ์์๋๋ค!
๋ฐ๋ผ์ ์๋์ฒ๋ผ ์ธ๋ถ์์ ์ ์ธํ ๋น๋๊ธฐ ํจ์๋ฅผ ์ดํํธํจ์๋ก ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํ๋ค.
useEffect(()=>{ myFunction() },[]);
const myFunction = async()=>{...};
์ถ์ฒ
https://devtrium.com/posts/async-functions-useeffect
https://medium.com/geekculture/react-uncaught-typeerror-destroy-is-not-a-function-192738a6e79b
https://ko.legacy.reactjs.org/docs/hooks-effect.html
๋๊ธ