React Hook의 규칙
- 컴포넌트 함수 또는 커스텀 훅 내부에서만 호출 가능: ⇒ React Hook은 반드시 React 함수 컴포넌트 또는 커스텀 훅 내부에서 호출해야 함
- 조건문, 반복문, 또는 비동기 함수 내부에서 호출 불가 ⇒ 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() },[])