Error: Element type is invalid 완벽 해결법
React 개발 중 Error: Element type is invalid 에러를 만나면 당황스러울 수 있습니다. 이 에러는 React가 렌더링하려는 컴포넌트를 올바르게 인식하지 못할 때 발생하는 대표적인 런타임 에러입니다. “Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined”라는 전체 메시지를 보면 React가 예상한 것과 다른 타입의 값을 받았다는 것을 알 수 있습니다. 이 글에서는 이 에러의 원인부터 해결법, 예방법까지 완벽하게 정리해드리겠습니다.
🤖 AI 에러 분석 도우미
이 에러는 다음과 같은 상황에서 주로 발생합니다:
- 코드 문법 오류가 있을 때
- 라이브러리나 의존성 문제
- 환경 설정이 잘못된 경우
- 타입 불일치 문제
💡 위 해결법을 순서대로 시도해보세요. 90% 이상 해결됩니다!
에러 상세 분석
🔗 관련 에러 해결 가이드
React는 컴포넌트를 렌더링할 때 유효한 React 엘리먼트를 기대합니다. 유효한 엘리먼트는 HTML 태그를 나타내는 문자열(예: ‘div’, ‘span’) 또는 React 컴포넌트 함수나 클래스여야 합니다. 하지만 Error: Element type is invalid가 발생한다는 것은 React가 undefined, null, 또는 객체와 같은 잘못된 값을 받았다는 의미입니다.
이 에러는 주로 개발 환경에서 발생하며, 프로덕션 빌드에서는 더 치명적인 결과를 초래할 수 있습니다. 에러 메시지는 브라우저 콘솔에 표시되며, 종종 “Check the render method of `ComponentName`”과 같은 추가 정보를 제공하여 문제가 발생한 컴포넌트를 식별하는 데 도움을 줍니다. 스택 트레이스를 통해 정확히 어느 파일의 어느 줄에서 문제가 발생했는지 추적할 수 있습니다.
발생 원인 5가지
1. 잘못된 import 구문
가장 흔한 원인은 Named Export와 Default Export를 혼동하는 것입니다. 컴포넌트가 default export로 내보내졌는데 named import로 가져오거나, 반대의 경우 undefined를 반환하여 에러가 발생합니다.
2. 존재하지 않는 컴포넌트 import
파일 경로가 잘못되었거나, 컴포넌트 이름이 변경되었는데 import 문을 업데이트하지 않은 경우 발생합니다. 이 경우 import된 값이 undefined가 되어 에러를 유발합니다.
3. 순환 의존성(Circular Dependency)
두 개 이상의 모듈이 서로를 import하는 순환 참조 상황에서 발생할 수 있습니다. 이 경우 모듈이 완전히 로드되기 전에 사용되어 undefined 상태가 됩니다.
4. 컴포넌트 반환 누락
함수형 컴포넌트에서 JSX를 return하지 않거나, 화살표 함수에서 중괄호를 사용했지만 return 키워드를 생략한 경우 undefined를 반환하게 됩니다.
5. 타입스크립트 타입 import 오류
TypeScript를 사용할 때 컴포넌트 대신 타입이나 인터페이스를 실수로 import하여 렌더링하려고 시도하는 경우에도 이 에러가 발생합니다.
해결방법 7가지
방법 1: Import/Export 방식 확인
Named Export와 Default Export를 올바르게 매칭시키세요.
// 잘못된 예
// Button.js
export const Button = () => ;
// App.js
import Button from './Button'; // undefined 반환!
// 올바른 예
// Button.js
export const Button = () => ;
// App.js
import { Button } from './Button'; // 정상 작동
// 또는 Default Export 사용
// Button.js
const Button = () => ;
export default Button;
// App.js
import Button from './Button'; // 정상 작동
방법 2: Import 경로 검증
파일 경로와 컴포넌트 이름이 정확한지 확인하세요.
// 잘못된 예
import Header from './components/Headr'; // 오타!
// 올바른 예
import Header from './components/Header';
방법 3: 컴포넌트 반환값 확인
화살표 함수에서 암시적 반환 또는 명시적 return을 사용하세요.
// 잘못된 예
const Card = () => {
Card Content // return 없음!
};
// 올바른 예 1: 암시적 반환
const Card = () => (
Card Content
);
// 올바른 예 2: 명시적 반환
const Card = () => {
return Card Content;
};
방법 4: 동적 Import 처리
React.lazy와 Suspense를 올바르게 사용하세요.
// 잘못된 예
const LazyComponent = React.lazy(() => import('./Component'));
// Suspense 없이 사용!
// 올바른 예
import React, { Suspense } from 'react';
const LazyComponent = React.lazy(() => import('./Component'));
function App() {
return (
Loading...