-
[React] useEffect() 에러 해결 . 조건문과 useEffect()훅을 잘못쓸때front-end/React 2022. 11. 9. 15:46
회사에서 프로젝트를 하다가 조건부 함수 구현을 할일이 있었는데 , if문을 useEffect밖에다가 코드를 작성하다가 만난 에러였다.
아래와 비슷한 로직이라고 생각하고 , 코드에서 보다시피 조건문이 useEffect를 감싸고 있다.
import React, {useEffect, useState} from 'react'; export default function App() { const [count, setCount] = useState(0); if (count > 0) { useEffect(() => { console.log('count is greater than 0'); }, [count]); } return ( <div> <h2>Count: {count}</h2> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); }
The error "React hook 'useEffect' is called conditionally" occurs when we use theuseEffecthook conditionally or after a condition that may return a value. To solve the error, move all React hooks above any conditionals that may return a value.이런 에러가 날텐데 대략 번역 하면
useEffect"React hook 'useEffect'가 조건부로 호출됨" 오류는 조건부로 또는 값을 반환할 수 있는 조건 이후에 후크 를 사용할 때 발생합니다 . 오류를 해결하려면 값을 반환할 수 있는 조건문 위로 모든 React 후크를 이동하세요.
이런뜻이다.
그래서 리액트 공식문서에서 검색을 해서 아래와 같은 결과를 얻을수있었다.
참조:https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level
- 최상위 수준에서 후크만 호출
- 루프, 조건 또는 중첩 함수 내에서 후크를 호출하지 마십시오.
- 조기 반환 전에 항상 React 함수의 최상위 수준에서 후크를 사용하십시오.
- React 함수 구성 요소 또는 사용자 정의 후크에서만 후크를 호출하십시오.
import React, {useEffect, useState} from 'react'; export default function App() { const [count, setCount] = useState(0); useEffect(() => { if (count > 0) { console.log('count is greater than 0'); } }, [count]); return ( <div> <h2>Count: {count}</h2> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); }import React, {useEffect, useState} from 'react'; export default function App() { const [count, setCount] = useState(0); // 👇️ moved hook above condition that may return useEffect(() => { console.log('count is greater than 0'); }, [count]); // 👇️ condition that may return is below all hooks if (count > 0) { return <h1>Count is greater than 0</h1>; } return ( <div> <h2>Count: {count}</h2> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); }useEffect() 훅을 최상단으로 맞췄더니 에러가 해결!
결론은
useEffect"React hook 'useEffect'가 조건부로 호출됨" 오류는 조건부로 또는 값을 반환할 수 있는 조건 이후에 후크 를 사용할 때 발생합니다 . 오류를 해결하려면 값을 반환할 수 있는 조건문 위로 모든 React 후크를 이동 하면 된다.
'front-end > React' 카테고리의 다른 글
[React-Router V6] useOutletContext (0) 2023.01.13 [React-Router V6 ] Outlet , createBrowersRouter (0) 2023.01.13 [React] filter() 메소드로 배열에서 제거 하기 (0) 2022.10.18 [React Hook 리액트 훅] 1. useEffect() hooks (LifeCycle) (1) 2022.10.05 [SSR , CSR] 서버사이드렌더링 , 클라이언트사이드렌더링 비교 (Next.js) (0) 2022.07.04