๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/React

[React] TypeError: destroy is not a function ์›์ธ๊ณผ ํ•ด๊ฒฐ๋ฒ•

by KASSID 2024. 12. 16.

๋ชฉ์ฐจ

    ์—๋Ÿฌํ™”๋ฉด..

     

    ์›์ธ

    ์šฐ์„  ํ•ด๋‹น ์—๋Ÿฌ๋Š” 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

     

    How to use async functions in useEffect (with examples) - Devtrium

    Using asynchronous functions in a useEffect hook is quite common, notably for data fetching. Let's see several ways of going about it!

    devtrium.com

     

    https://medium.com/geekculture/react-uncaught-typeerror-destroy-is-not-a-function-192738a6e79b

     

    Reactโ€Š—โ€ŠUncaught TypeError: destroy is not a function

    While experimenting with useEffect hooks in React and React Native, I came across the following error:

    medium.com


    https://ko.legacy.reactjs.org/docs/hooks-effect.html

     

    Using the Effect Hook – React

    A JavaScript library for building user interfaces

    ko.legacy.reactjs.org

     

    ๋Œ“๊ธ€