오티스의개발일기

useEffect must not return anything besides a function, which is used for clean-up. 에러 해결 본문

에러 모음/react-native

useEffect must not return anything besides a function, which is used for clean-up. 에러 해결

안되면 될때까지.. 2023. 1. 11. 15:56
728x90

에러내용

 LOG  Running "baund" with {"rootTag":291,"initialProps":{}}
 ERROR  Warning: useEffect must not return anything besides a function, which is used for clean-up.

It looks like you wrote useEffect(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:

useEffect(() => {
  async function fetchData() {
    // You can await here
    const response = await MyAPI.getData(someId);
    // ...
  }
  fetchData();
}, [someId]); // Or [] if effect doesn't need props or state

 

useEffect Hook 내부에 자체적으로 비동기 함수가 들어가있어

useEffect 안에서 따로 비동기를 사용하면 에러가뜬다.

 

useEffect 안에서 어떤 비동기 로직을짤때

함수로 따로 만들어서 호출을 해야한다

 

 

 

하기전과 후로 나눠서 올리겠다

 

 

변경전 

 

  useEffect(async () => {
        setMode(nowMode)
        // --------- 여기부터 -------------
        let token = await $Util.getStoreData('token');
        if (!$Util.isEmpty(token)) {
            console.log(token)
            if (!$Util.isEmpty(token.accessToken)) {
                console.log('로그인한적있음')
            } else {
                console.log('로그인한적 X')    
            }
        } else {
            await $Util.setStoreData('token', {accessToken: null, refreshToken: null})
        }
        // --------- 여기까지를 원함 -------------
      },[]);

 

 

변경후

 

    useEffect(() => {  // <-- 여기있던 async 는 제거
        setMode(nowMode)
        // --------- 여기부터 -------------
        const isLogined = async () => { // <-- async 추가
            let token = await $Util.getStoreData('token');
            if (!$Util.isEmpty(token)) {
                console.log(token)
                if (!$Util.isEmpty(token.accessToken)) {
                    console.log('로그인한적있음')
                } else {
                    console.log('로그인한적 X')    
                }
            } else {
                await $Util.setStoreData('token', {accessToken: null, refreshToken: null})
            }
        }
        isLogined(); // <----- 여기에서 만든함수를 한번만 호출
        // --------- 여기까지를 원함 -------------
      },[]);

 

 

이렇게하면 에러가 사라진다.

728x90
Comments