인프런 커뮤니티 질문&답변

박호정님의 프로필 이미지
박호정

작성한 질문수

[리액트 1부] 만들고 비교하며 학습하는 리액트 (React)

[구현하기 1] SearchForm 2

Cannot read properties of undefined (reading 'props')

작성

·

35

·

수정됨

0

image.pngimage.pngimage.png

 

수업 영상대로 따라갔을때 props가 undefined로 나오는데 별도의 설정이 필요할까요?

 

SearchForm에서 다음 코드를 추가했을때도 동일하게 안되네요

  constructor(props) {
    super(props);
    ...

  }

답변 2

0

박호정님의 프로필 이미지
박호정
질문자

SearchForm.js에서 아래와 같이 변경하니 해결되었습니다. 두 코드 간의 동작상 차이점은 없어보이는데, 다르게 동작하는 이유가 있을까요?

기존

<form onSubmit={this.handleSubmit}>

변경

<form onSubmit={event => this.handleSubmit(event)}>
김정환님의 프로필 이미지
김정환
지식공유자

자바스크립트의 this 특성을 이해하시면 좋습니다. this 값은 실행 컨택스트에 따라 다른데요.

<기존> 방식은 onSumbit에 함수를 전달할 때 this.handleSubmit 함수값을 전달했습니다. 언젠가 onSumbit에 등록한 이 값이 실행되는데요. 이 때 this.props로 접근하지만 this는 SearchForm 인스턴스가 아니라서 오류가 발생합니다.

<변경> 방식은 onSubmit에 함수를 전달할 때 직접 정의했습니다. 언제가 onSubmit 등록한 이 값이 실행되는데요. 이때 this.handleSubmit(event)가 호출됩니다. 화살표함수이기 때문에 렉시컬 컨택스트를 따라 this는 SearchForm 인스턴스를 가리킵니다. hanelSubmit 함수 본문에소도 this가 SearchForm 인스턴스를 가리키기 때문에 정상 동작하게 됩니다.

 

--

강의 후반에 다루는 함수 컴포넌트 편에서는 아예 this를 사용하지 않는데요. 이러한 자바스크립트 this의 까다로운 사용법을 회피할 수 있어서 간편하게 사용할 수 있습니다.

 

0

안녕하세요, 인프런 AI 인턴입니다. 박호정님.

리액트에서 “Cannot read properties of undefined (reading ‘props’)” 오류는 일반적으로 컴포넌트가 부모 컴포넌트로부터 props를 제대로 받지 못할 때 발생합니다.

먼저, 이미지를 통해 제공해주신 코드와 함께 발생한 오류 상황을 종합적으로 고려해 보겠습니다. SearchForm 컴포넌트에서 props를 제대로 전달받지 못하는 문제를 해결하려면, 다음 사항을 확인해 보세요:

  1. 부모 컴포넌트에서 props 전달 여부 확인:

    • App.js에서 SearchForm 컴포넌트에 onSubmit prop을 전달하고 있는지 확인하세요.
    <SearchForm onSubmit={this.search} />
    
  2. props가 제대로 전달되었는지 확인:

    • SearchForm.js 내에서 props.onSubmit를 제대로 호출하고 있는지 확인하세요. 호출 시에는 반드시 this.props를 통해 접근해야 합니다.
    handleSubmit = (event) => {
     event.preventDefault();
     this.props.onSubmit(this.state.searchKeyword);
    }
    
  3. 컴포넌트 초기화에서 super를 사용했는지 확인:

    • constructor 내에서 super(props);를 호출했는지 다시 한 번 확인해 보세요. 이미 실행하셨다고 하셨지만, 혹여나 관련 코드가 수정되었는지도 체크해 주세요.

추가적으로, 이미지를 통해 추측해 보건대, props 전달 과정에서 누락된 부분이 있을 수 있습니다. 종종, 부모 컴포넌트에서 자식 컴포넌트로 props를 전달할 때 오타가 발생하거나 의도치 않은 변경이 생겨 문제가 발생하곤 합니다.

유사한 문제와 관련된 기존 질문에서 힌트를 찾으실 수 있도록 아래 링크를 참고해 주세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

박호정님의 프로필 이미지
박호정

작성한 질문수

질문하기