1. PropTypes
1.1. props์ ํ์ ๊ฒ์ฌ๋ฅผ?
2. PropTypes ์ ์ฉํ๊ธฐ
2.1. ์ค์น
2.2. ํ์ ์ ๋ฐ๋ฅธ ๋ค์ํ ํ๋กํผํฐ
2.3. ํ์ prop ์ง์ ํ๊ธฐ
2.4. default props ์ง์ ํ๊ธฐ
2.5. ํ์ฉ
3. ์ฐธ๊ณ

1. PropTypes
๋ฆฌ์กํธ์์๋ props๋ฅผ ํตํด์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๊ณ , ์ด๋ฅผ ํตํด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
์ฐ์ฐ์ฐฎ๊ฒ props์ ํ์ ๊ฒ์ฌ๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
1.1. props์ ํ์ ๊ฒ์ฌ๋ฅผ?
์์ ํซํ ํ์ ์คํฌ๋ฆฝํธ๋๋ฅผ ์ฐ๋ ์ด์ ์ค ํ๋๋ ํ์ ์ ์๊ฒฉํ๊ฒ ์ฒดํฌํด์ ์๋ฌ๋ฅผ ์ค์ด๊ธฐ ์ํจ๋ ์๋ค.
props์ ํ์ ๊ฒ์ฌ๊ฐ ํ์ํ ์ด์ ๋ ์ด์ ๊ฒฐ์ด ๊ฐ๋ค๊ณ ๋ณธ๋ค. ์ปดํฌ๋ํธ๊ฐ ์๋ชป๋ ํ์ ์ props๋ฅผ ์ ๋ฌ๋ฐ๊ฑฐ๋,
ํ์ํ props๊ฐ ๋๋ฝ๋๋ค๋ฉด ์๋์น ์์ ์๋ฌ๋ก ์ด์ด์ง ๊ฒ!.. PropTypes๋ ์ด๋ฐ ์๋ฌ๋ฅผ ๋ฐฉ์งํด์ค ์ ์๋ค.
์ฐธ๊ณ ๋ก ๋ฆฌ์กํธ ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด PropTypes๋ React v15.5๋ถํฐ prop-types๋ผ๋ ํจํค์ง๋ก ๋ถ๋ฆฌ๋์๋ค!..
๊ทธ๋ผ prop-types๋ฅผ ์ด๋ป๊ฒ ์ธ๊น?? ๐ค
2. PropTypes ์ ์ฉํ๊ธฐ
2.1. ์ค์น
์ผ๋จ ์ค์น๋ฅผ ํ์.
npm install prop-types
yarn์ ์ฐ๊ณ ์๋ค๋ฉด ์ด๋ ๊ฒ ์ค์นํ ์ ์๋ค.
yarn add prop-types
2.2. ํ์ ์ ๋ฐ๋ฅธ ๋ค์ํ ํ๋กํผํฐ
๋ฆฌ์กํธ ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์๋์ ๊ฐ์ด ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ๊ฐ๋ฅํ๋ค.
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
}),
2.3. ํ์ prop ์ง์ ํ๊ธฐ
isRequired
๋ผ๋ ์์ฑ์ผ๋ก ๋ฐ๋์ ์ ๋ฌ๋ฐ์์ผ ํ๋ ๊ฐ์์ ๋ช
์ํ ์ ์๋ค.
// ์์ ์๋ ๊ฒ ๋ชจ๋ `isRequired`์ ์ฐ๊ฒฐํ์ฌ prop๊ฐ ์ ๊ณต๋์ง ์์์ ๋
// ๊ฒฝ๊ณ ๊ฐ ๋ณด์ด๋๋ก ํ ์ ์์ต๋๋ค.
requiredFunc: PropTypes.func.isRequired,
// ๋ชจ๋ ๋ฐ์ดํฐ ํ์
์ด ๊ฐ๋ฅํ ํ์๊ฐ
requiredAny: PropTypes.any.isRequired,
2.4. default props ์ง์ ํ๊ธฐ
props์ default ๊ฐ์ ๋ฃ๋ ๊ฒ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฐ๋ฅํ์ง๋ง, ์ด๋ ๊ฒ defaultProps ํ๋กํผํฐ๋ฅผ ํ ๋นํด์ ์ด๊ธฐ๊ฐ์ ์ง์ ํด์ค ์๋ ์๋ค.
Greeting.defaultProps = {
name: 'Stranger'
};
2.5. ํ์ฉ
User๋ผ๋ ์ปดํฌ๋ํธ๊ฐ ์์ ๋ ์ค์ ๋ก ์ด๋ ๊ฒ ์ง์ ํด์ค ์ ์๋ค.
User.propTypes = {
age: PropTypes.number,
name: PropTypes.string.isRequired,
};

๊ทธ๋ผ name ๊ฐ์ด ์์ ๊ฒฝ์ฐ ์ฝ์์์ ์ด๋ฐ ์๋ฌ๋ฅผ ๋ง๋ ์ ์๋ค.
3. ์ฐธ๊ณ
๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์
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
'๐ Studying > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] React-thunk ์์๋ณด๊ธฐ (0) | 2022.12.20 |
---|---|
[React] Styled-Components ํ์ฉ (0) | 2022.12.08 |
[React] State์ Props (0) | 2022.12.07 |
[React] ๋ฆฌ๋์ค.. ์ ์ฐ์ฃ ? ํ์์ฑ๊ณผ ๊ทธ ๊ตฌ์กฐ์ ๋ํด (0) | 2022.09.29 |
[React] ๋ฆฌ์กํธ์ ๋ผ์ดํ ์ฌ์ดํด ๐ค (0) | 2022.09.28 |
Comment