HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
💌
JJong’s Archive
/
🐻
고민곰인
/
Next.js 에서 Invalid hook call. Hooks can only be called inside of the body of a function component. 에러

Next.js 에서 Invalid hook call. Hooks can only be called inside of the body of a function component. 에러

Tags
Next.js
생성 일시
Dec 27, 2024 12:06 PM
Status
Done

React Hook의 규칙

  1. 컴포넌트 함수 또는 커스텀 훅 내부에서만 호출 가능: ⇒ React Hook은 반드시 React 함수 컴포넌트 또는 커스텀 훅 내부에서 호출해야 함
  1. 조건문, 반복문, 또는 비동기 함수 내부에서 호출 불가 ⇒ React Hook은 항상 컴포넌트의 최상위 레벨에서 호출되어야 함
 

원인

Next.js에서 비동기로 컴포넌트를 만들었더니.. 2번 규칙에 위배되어 에러가 난 것이다.

해결방법

방법1. 클.컴을 컴포넌트로 만들어서, 서.컴에서 비동기 데이터 가져오고 클.컴을 호출할 때 데이터를 props로 넘겨주는 방식 !
Before)
const ProductsPage = async () => { const initialProducts = await getProducts(0) const [products, setProducts] = useState(initialProducts); // ❌ 에러 발생
 
After)
const ProductsClient = ({ initialProducts }) => { const [products, setProducts] = useState(initialProducts); }
 
방법2.
useEffect(()=>{ const getInitialProducts = async () => { const initialProducts = await getProducts(0) setTotalProducts(initialProducts) } getInitialProducts() },[])