[React] PropTypes๋กœ props ํƒ€์ž… ๊ฒ€์‚ฌ
728x90

 

PropTypes

๋ฆฌ์•กํŠธ์—์„œ๋Š” props๋ฅผ ํ†ตํ•ด์„œ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์šฐ์—ฐ์ฐฎ๊ฒŒ props์— ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.

 

 

props์— ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ?

์š”์ƒˆ ํ•ซํ•œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š”๋ฅผ ์“ฐ๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ํƒ€์ž…์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ฒดํฌํ•ด์„œ ์—๋Ÿฌ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•จ๋„ ์žˆ๋‹ค.

props์— ํƒ€์ž… ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋„ ์ด์™€ ๊ฒฐ์ด ๊ฐ™๋‹ค๊ณ  ๋ณธ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž˜๋ชป๋œ ํƒ€์ž…์˜ props๋ฅผ ์ „๋‹ฌ๋ฐ›๊ฑฐ๋‚˜,

ํ•„์š”ํ•œ props๊ฐ€ ๋ˆ„๋ฝ๋œ๋‹ค๋ฉด ์˜๋„์น˜ ์•Š์€ ์—๋Ÿฌ๋กœ ์ด์–ด์งˆ ๊ฒƒ!.. PropTypes๋Š” ์ด๋Ÿฐ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด PropTypes๋Š” React v15.5๋ถ€ํ„ฐ prop-types๋ผ๋Š” ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌ๋˜์—ˆ๋‹ค!..

๊ทธ๋Ÿผ prop-types๋ฅผ ์–ด๋–ป๊ฒŒ ์“ธ๊นŒ?? ๐Ÿค”

 

 

PropTypes ์ ์šฉํ•˜๊ธฐ

์„ค์น˜

์ผ๋‹จ ์„ค์น˜๋ฅผ ํ•˜์ž.

npm install prop-types 

yarn์„ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

yarn add prop-types

 

 

ํƒ€์ž…์— ๋”ฐ๋ฅธ ๋‹ค์–‘ํ•œ ํ”„๋กœํผํ‹ฐ

๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

import PropTypes from 'prop-types';

MyComponent.propTypes = {
  // prop๊ฐ€ ํŠน์ • JS ํ˜•์‹์ž„์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  // ์ด๊ฒƒ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋‘ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
  optionalArray: PropTypes.array,
  optionalBool: PropTypes.bool,
  optionalFunc: PropTypes.func,
  optionalNumber: PropTypes.number,
  optionalObject: PropTypes.object,
  optionalString: PropTypes.string,
  }

 

๊ฐ์ฒด์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋„ ์ •๋ง ๋งŽ๋‹ค.

  // ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์ค‘ ํ•˜๋‚˜์˜ ์ข…๋ฅ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
  optionalUnion: PropTypes.oneOfType([
    PropTypes.string,
    PropTypes.number,
    PropTypes.instanceOf(Message)
  ]),

  // ํŠน์ • ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’๋“ค์„ ๊ฐ–๋Š” ๊ฐ์ฒด
  optionalObjectOf: PropTypes.objectOf(PropTypes.number),

  // ํŠน์ • ํ˜•ํƒœ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด
  optionalObjectWithShape: PropTypes.shape({
    color: PropTypes.string,
    fontSize: PropTypes.number
  }),

  // ์ถ”๊ฐ€ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด
  optionalObjectWithStrictShape: PropTypes.exact({
    name: PropTypes.string,
    quantity: PropTypes.number
  }),

 

 

ํ•„์ˆ˜ prop ์ง€์ •ํ•˜๊ธฐ

isRequired ๋ผ๋Š” ์†์„ฑ์œผ๋กœ ๋ฐ˜๋“œ์‹œ ์ „๋‹ฌ๋ฐ›์•„์•ผ ํ•˜๋Š” ๊ฐ’์ž„์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

  // ์œ„์— ์žˆ๋Š” ๊ฒƒ ๋ชจ๋‘ `isRequired`์™€ ์—ฐ๊ฒฐํ•˜์—ฌ prop๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•˜์„ ๋•Œ
  // ๊ฒฝ๊ณ ๊ฐ€ ๋ณด์ด๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  requiredFunc: PropTypes.func.isRequired,

  // ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•œ ํ•„์ˆ˜๊ฐ’
  requiredAny: PropTypes.any.isRequired,

 

 

default props ์ง€์ •ํ•˜๊ธฐ

props์— default ๊ฐ’์„ ๋„ฃ๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ defaultProps ํ”„๋กœํผํ‹ฐ๋ฅผ ํ• ๋‹นํ•ด์„œ ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

Greeting.defaultProps = {
  name: 'Stranger'
};

 

ํ™œ์šฉ

User๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ์„ ๋•Œ ์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

User.propTypes = {
  age: PropTypes.number,
  name: PropTypes.string.isRequired,
};

๊ทธ๋Ÿผ name ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ์ฝ˜์†”์—์„œ ์ด๋Ÿฐ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ฐธ๊ณ 

๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ
https://ko.reactjs.org/docs/typechecking-with-proptypes.html

 

PropTypes์™€ ํ•จ๊ป˜ ํ•˜๋Š” ํƒ€์ž… ๊ฒ€์‚ฌ – React

A JavaScript library for building user interfaces

ko.reactjs.org

 

 

[React] PropTypes ์“ฐ๋Š” ์ด์œ , ๋ฐฉ๋ฒ•

์ž‘์—…ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ์ƒ๊ฐ์ง€ ๋ชปํ•œ ๊ณณ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ผ์ด ์žฆ์•„์ง„๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, PropTypes๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํƒ€์ž…(type)์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋Œ€ํ‘œ์ ์ด๋‹ค.

velog.io

 

 

728x90