본문 바로가기
React/errors

[error] ~ is missing in props validation

by tokkiC 2022. 11. 30.

react 에서 하위 컴포넌트에 props 를 이용해서 데이터를 전달하려던 중,

그-컴포넌트 is missing in props validation

해당 컴포넌트 파일에서 해당 props 를 사용하는 부분에서 모두 위와 같은 에러가 떴었다

 

에러 원인

props 의 타입 검증이 필요하다는 의미이다

eslint 를 사용할 때에 나오며, 오류를 막기 위해 props의 더 정확한 타입을 요구하는 것이다

 

해결방법

yarn add prop-types

로 라이브러리를 설치 후,
props 를 받는 해당 컴포넌트 정의 파일 내에서,

import PropTypes from 'prop-types'

임포트 해 온 후, 해당 컴포넌트와 같은 최상위 레벨에서(=컴포넌트 밖에서) 아래와 같이 props 타입을 정의해주면 된다
대소문자 구분과 Props 가 아님을 주의하자

// 여기선 p가 소문자!
그-컴포넌트.propTypes = {

    // 여기선 P가 대문자!
    title: PropTypes.string,
    price: PropTypes.number
}

객체나 배열 등의 타입을 정의 시, 다음의 표를 참조하여 사용하자

Type Name explain example
element 리액트 element PropTypes.element
array 배열 PropTypes.array
bool true / false PropTypes.bool
func 함수 PropTypes.func
number 숫자 PropTypes.number
object 객체 PropTypes.object
string 문자열 PropTypes.string
symbol 심볼 객체 PropTypes.symbol
node 렌더링 가능한 모든 것.
(number, string, element)
PropTypes.node
instanceOf(ClassName) 특정 클래스의 인스턴스 PropTypes.instanceOf(ClassName)
oneOf(['value']) 배열에 포함된 값들 중 하나가 일치 PropTypes.oneOf(['강아지', '고양이'])
oneOfType(['PropTypes']) 배열에 포함된 타입 중에서 하나가 일치 PropTypes.oneOfTyle(['PropTypes.string.isRequire', 'PropTypes.number'])
arrayOf(PropTypes) 해당 PropTypes로 구성된 배열 PropTypes.arrayOf(PropTypes.number)
objectOf(PropTypes) 객체의 모든 키 값이 인자로 주어진 PropType 객체 PropTypes.objectOf(PropTypes.string)
shape({key:PropTypes}) 해당 스키마를 가진 객체 PropTypes.shape({name:PropTypes.string, phone: PropTypes.number})
any 아무종류나 PropTypes.any

위의 표는 타입별로 림찌님의 블로그에서 정리하신 내용이다. 정말 깔끔하게 정리하셨다

림찌의 개발일기 : https://haerim95.tistory.com/41

아래 예시처럼 사용하자

// title 과 price 속성을 가진 shoes 객체 등은 아래와 같이 정의하자

그-컴포넌트.propTypes = {
  shoes: PropTypes.shape({
    title: PropTypes.string,
    price: PropTypes.number,
  }).isRequired,
  i: PropTypes.number,
};

댓글