React 코드의 완성도를 높이는 PropTypes와 ESLint의 만남

2025. 6. 4. 00:28·💻 개발/🦕 React
728x90

React로 프로젝트를 진행할 때, ESLint가 아래와 같은 경고를 띄울 때가 있다.

'react/prop-types': 'desc' is missing in props validation

 

이 글에서는 이 경고가 왜 발생하는지, 그리고 어떻게 해결할 수 있는지를 정리한다. 또한 prop-types의 개념과 함께 예시를 통해 props 검증의 기본을 다져보려 한다.

 

 

 

경고의 원인

 

React에서 컴포넌트는 부모로부터 props를 받아 렌더링을 수행한다.


기본적으로 props의 타입은 자유롭지만, 타입이 예상과 다르면 의도하지 않은 동작이나 오류가 발생할 수 있다.

 

이를 방지하기 위해 ESLint의 react/prop-types 규칙은 props의 타입을 명시하도록 요구한다.

 

props 타입을 명시하지 않으면, 위와 같은 경고가 발생한다.

 

 

 

경고 해결: prop-types 사용

 

prop-types는 props의 타입을 런타임에서 검증해주는 React의 공식 라이브러리이다.
먼저 prop-types를 설치해야 한다.

npm install prop-types

 

설치가 끝나면, 컴포넌트에 아래와 같이 props의 타입을 정의할 수 있다.

 

 

 

기본적인 사용 예시

 

아래는 Header 컴포넌트에서 desc라는 props를 문자열로 정의한 예시이다.

import React from 'react';
import PropTypes from 'prop-types';

function Header({ desc }) {
    return (
        <div>
            {desc ? <p>{desc}</p> : <h1>Login</h1>}
        </div>
    );
}

// desc를 문자열(string)로 정의
Header.propTypes = {
    desc: PropTypes.string
};

export default Header;

 

이렇게 하면 ESLint 경고가 사라지고, props의 타입 검증이 수행된다.

 

 

 

prop-types의 다양한 예시

 

prop-types는 문자열뿐 아니라 다양한 타입 검증을 지원한다. 아래는 자주 사용하는 예시이다.

import PropTypes from 'prop-types';

MyComponent.propTypes = {
    // 기본 타입
    name: PropTypes.string,
    age: PropTypes.number,
    isActive: PropTypes.bool,

    // 배열
    items: PropTypes.array,

    // 객체
    user: PropTypes.object,

    // 함수
    onClick: PropTypes.func,

    // 특정 형태의 객체
    settings: PropTypes.shape({
        theme: PropTypes.string,
        darkMode: PropTypes.bool
    }),

    // 필수값으로 지정 (isRequired)
    email: PropTypes.string.isRequired,

    // 여러 타입 중 하나 허용
    status: PropTypes.oneOf(['active', 'pending', 'disabled']),

    // 배열 요소 타입 지정
    tags: PropTypes.arrayOf(PropTypes.string)
};

 

 

 

isRequired의 의미

 

isRequired를 사용하면, 해당 props가 반드시 존재해야 함을 명시할 수 있다.

 

예를 들어 아래처럼 정의하면, email이 전달되지 않을 때 경고가 발생한다.

MyComponent.propTypes = {
    email: PropTypes.string.isRequired
};

 

 

 

 

prop-types와 TypeScript의 비교

 

prop-types는 런타임에서 props의 타입을 검사한다.

 

반면, TypeScript는 컴파일 타임에 타입을 검증하기 때문에 더 강력한 타입 안전성을 제공한다.

 

TypeScript를 사용하는 경우라면 prop-types 대신 TypeScript의 인터페이스나 타입을 사용하면 된다.

 

 

 

정리
  • react/prop-types 경고는 props의 타입을 명시하지 않았기 때문에 발생한다.
  • prop-types를 사용하여 props의 타입을 정의하면 경고가 사라지고, 유지보수와 디버깅이 쉬워진다.
  • 다양한 예시를 참고하여 프로젝트의 요구사항에 맞게 props 검증을 설정할 수 있다.
  • 타입 검증은 작은 습관이지만, 코드의 품질과 안정성을 높이는 중요한 부분이다.

 

오늘도 한 단계 성장!

 

728x90

'💻 개발 > 🦕 React' 카테고리의 다른 글

[React] React에서 한글 입력(IME) 깨짐 문제 해결하기  (1) 2025.08.28
[React] React 프로젝트에 Vercel + GitHub Actions로 CI/CD 구축하기  (1) 2025.08.01
[React] useReducer란 무엇인가요? 상태 관리의 또 다른 방법!  (0) 2025.07.03
[React] 성능 잡는 Hook! useMemo, useCallback, 그리고 React.memo 정리 끝판왕  (0) 2025.07.01
[React] 한 줄로 코드를 깔끔하게? 구조 분해 할당 완전 정복  (0) 2025.04.05
'💻 개발/🦕 React' 카테고리의 다른 글
  • [React] React 프로젝트에 Vercel + GitHub Actions로 CI/CD 구축하기
  • [React] useReducer란 무엇인가요? 상태 관리의 또 다른 방법!
  • [React] 성능 잡는 Hook! useMemo, useCallback, 그리고 React.memo 정리 끝판왕
  • [React] 한 줄로 코드를 깔끔하게? 구조 분해 할당 완전 정복
pangil_kim
pangil_kim
기록을 통해 지속적인 성장을 추구합니다.
    250x250
  • pangil_kim
    멈추지 않는 기록
    pangil_kim
  • 전체
    오늘
    어제
  • 📝 글쓰기
      ⚙️ 관리

    • 분류 전체보기 (495) N
      • 💻 개발 (118)
        • ※ 참고 지식 (5)
        • 📀 MySQL (24)
        • 🌸 Spring Boot (5)
        • 🟩 Node.js (7)
        • 🦕 React (6)
        • 🎩 Next.js (25)
        • 📘 TypeScript (4)
        • 🌈 CSS (4)
        • 🌀 Dart (2)
        • 🧑🏻‍💻 코테 (25)
        • 🕸️ 알고리즘 (3)
        • 🩵 Flutter (8)
      • 📽️ 프로젝트 (5)
        • 캡스톤디자인2 (5)
      • ✍🏻 회고 (8)
      • 📰 정보 공유 (12)
      • 🏫 한동대학교 (138)
        • Database (15)
        • Software Engineering (18)
        • EAP (22)
        • 일반화학 (26)
        • 25-1 수업 정리 (19)
        • Computer Networking (36)
        • OPIc (2)
      • 🧎🏻 묵상 (113) N
        • ⛪️ 설교 (35) N
        • 🙏 QT(날솟샘) (78) N
      • 🎶 찬양 (96) N
        • 어노인팅 (87) N
        • GIFTED (1)
        • LEVISTANCE (1)
        • 마커스 (3)
        • 아이자야 씩스티원 (1)
        • FIA 워십 (3)
  • 최근 글

  • 인기 글

  • 태그

    csee
    CHEMISTRY
    QT
    날솟샘
    글로벌리더십학부
    고윤민교수님
    프론트엔드
    한동대학교
    설교
    컴네
    주일
    찬양
    예배
    네트워킹
    SQL
    화학
    Database
    데이터베이스
    날마다 솟는 샘물
    일반화학
    묵상
    CCM
    typeScript
    전산전자공학부
    유태준교수님
    computer networks and the internet
    GLS
    어노인팅
    FE
    웹개발
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
pangil_kim
React 코드의 완성도를 높이는 PropTypes와 ESLint의 만남

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.