안녕하세요, 코딩하는곰입니다! 😊
20년 넘게 React를 다루면서 가장 자주 마주치는 에러 중 하나가 바로 ‘Cannot read properties of undefined’입니다. 이 에러는 React 개발자라면 누구나 한 번쯤 경험해보셨을 텐데요, 오늘은 이 에러의 발생 원인부터 다양한 해결 방법까지 깊이 있게 다루어보겠습니다. 초보자부터 중급자까지 모두 이해할 수 있도록 상세히 설명드릴 테니 끝까지 함께해주세요!
이 에러의 근본적인 원인은 존재하지 않는 객체의 프로퍼티에 접근하려고 할 때 발생합니다. React에서는 주로 다음과 같은 상황에서 나타납니다:
초기화되지 않은 state 접근
function MyComponent() {const [user, setUser] = useState(); // 초기값 없음return <div>{user.name}</div>; // user가 undefined}
비동기 데이터 처리 미흡
function UserProfile({ userId }) {const [user, setUser] = useState(null);useEffect(() => {fetchUser(userId).then(data => setUser(data));}, [userId]);return <div>{user.details.address}</div>; // 초기 렌더링 시 user가 null}
옵셔널 체이닝 미사용
// 문제 코드const fullName = props.user.profile.name;// 해결 코드 (옵셔널 체이닝)const fullName = props.user?.profile?.name;
잘못된 props 전달
<UserCard user={undefined} /> // 하위 컴포넌트에서 user.name 접근 시 에러
📱 앱 개발에 도전하고 싶다면, (자바 역사) 가전제품을 위한 언어에서 세계 최고의 프로그래밍 언어로 - Green 프로젝트의 시작를 참고해보세요.
// State 초기화const [user, setUser] = useState({name: '',profile: {}});// Props 기본값UserProfile.defaultProps = {user: {name: 'Guest',profile: {}}};
// 중첩 객체 접근 시const userCity = user?.address?.city || 'Unknown';// 함수 호출 시const result = apiResponse?.data?.getItems?.();
interface User {name: string;profile?: {avatar?: string;};}const UserAvatar: React.FC<{ user: User }> = ({ user }) => {return <img src={user.profile?.avatar || '/default.png'} />;};
function UserInfo({ user }) {if (!user) return <LoadingSpinner />;return (<div><h2>{user.name}</h2>{user.profile && <p>{user.profile.bio}</p>}</div>);}
닉네임을 고르다가 마음에 드는 걸 놓쳤다면? 생성 이력을 저장해주는 닉네임 추천 도구가 딱입니다.
function useSafeAccess(obj, path, defaultValue) {return path.split('.').reduce((acc, key) =>(acc && acc[key] !== undefined) ? acc[key] : defaultValue,obj);}// 사용 예시const userName = useSafeAccess(user, 'profile.name', 'Anonymous');
class ErrorBoundary extends React.Component {state = { hasError: false };static getDerivedStateFromError() {return { hasError: true };}render() {if (this.state.hasError) {return <FallbackUI />;}return this.props.children;}}// 사용 예시<ErrorBoundary><UnstableComponent /></ErrorBoundary>
// lodash의 get 함수 사용import _ from 'lodash';const deepValue = _.get(object, 'path.to.deep.value', defaultValue);// 직접 구현한 safeAccessconst safeAccess = (obj, path) =>path.split('.').reduce((acc, key) => acc?.[key], obj);
게임이나 SNS에서 쓸 닉네임이 고민된다면, 카테고리별로 추천해주는 닉네임 생성기를 활용해보세요.
이렇게 ‘Cannot read properties of undefined’ 에러에 대한 다양한 해결 방법을 살펴보았습니다. 🎯
React 개발에서 이 에러는 결코 피할 수 없는 것이 아니라, 더 견고한 애플리케이션을 만들기 위한 기회로 삼을 수 있습니다.
여러분의 프로젝트에 맞는 최적의 해결책을 선택하시고, 궁금한 점이 있다면 언제든 댓글로 문의해주세요!
다음 시간에는 또 다른 유용한 React 팁으로 찾아뵙겠습니다. 코딩하는곰이었습니다! 🐾
(추가로 공유하고 싶은 팁이나 경험이 있다면 댓글로 공유해주세요! 여러분의 소중한 경험은 다른 개발자들에게 큰 도움이 됩니다.)
이미지 속 대표 색상을 추출하고 싶을 때는, 이미지 업로드 기반 컬러코드 추출기를 활용해 빠르게 확인할 수 있습니다.
