10.4 Protection with PropTypes
2022. 9. 22. 14:38ㆍReact/ReactJS로 영화 웹 서비스 만들기
자 그럼 우리의 prop을 점검해보자.
father component로부터 전달받은 props가 우리가 예상한 props인지!
자 그럼 rating을 추가해보자

import React from "react";
const foodILike = [
{
id: 1,
name: "Kimchi",
image:
"http://aeriskitchen.com/wp-content/uploads/2008/09/kimchi_bokkeumbap_02-.jpg",
rating: 8,
},
{
id: 2,
name: "Samgyeopsal",
image:
"https://3.bp.blogspot.com/-hKwIBxIVcQw/WfsewX3fhJI/AAAAAAAAALk/yHxnxFXcfx4ZKSfHS_RQNKjw3bAC03AnACLcBGAs/s400/DSC07624.jpg",
rating: 7.8,
},
{
id: 3,
name: "Bibimbap",
image:
"http://cdn-image.myrecipes.com/sites/default/files/styles/4_3_horizontal_-_1200x900/public/image/recipes/ck/12/03/bibimbop-ck-x.jpg?itok=RoXlp6Xb",
rating: 6.9,
},
{
id: 4,
name: "Doncasu",
image:
"https://s3-media3.fl.yelpcdn.com/bphoto/7F9eTTQ_yxaWIRytAu5feA/ls.jpg",
rating: 9.8,
},
{
id: 5,
name: "Kimbap",
image:
"http://cdn2.koreanbapsang.com/wp-content/uploads/2012/05/DSC_1238r-e1454170512295.jpg",
rating: 8.5,
},
];
function Food({ name, picture, rating }) {
return (
<div>
<h2>I like {name}</h2>
<h4>{rating}/5.0</h4>
<img src={picture} alt={name} />
</div>
);
}
function App() {
return (
<div>
{foodILike.map((dish) => (
<Food
key={dish.id}
name={dish.name}
picture={dish.image}
rating={dish.rating}
/>
))}
</div>
);
}
export default App;

그리고 prop types를 설치해보자.
npm i prop-types
prop types은 전달받은 props가 원하는 props인지 확인해준다!
그러고 아래와 같이 입력해주고 로드를 하면

다음과 같은 에러가 나는데, 이는 rating은 string으로 조건이 있는데, 우리는 number로 입력을했었으니..

그래서 다음과 같이 number로 바꿔보자. 그럼 정상적으로 에러가 나지 않는다.

전체코드
import React from "react";
import PropTypes from "prop-types";
const foodILike = [
{
id: 1,
name: "Kimchi",
image:
"http://aeriskitchen.com/wp-content/uploads/2008/09/kimchi_bokkeumbap_02-.jpg",
rating: 8,
},
{
id: 2,
name: "Samgyeopsal",
image:
"https://3.bp.blogspot.com/-hKwIBxIVcQw/WfsewX3fhJI/AAAAAAAAALk/yHxnxFXcfx4ZKSfHS_RQNKjw3bAC03AnACLcBGAs/s400/DSC07624.jpg",
rating: 7.8,
},
{
id: 3,
name: "Bibimbap",
image:
"http://cdn-image.myrecipes.com/sites/default/files/styles/4_3_horizontal_-_1200x900/public/image/recipes/ck/12/03/bibimbop-ck-x.jpg?itok=RoXlp6Xb",
rating: 6.9,
},
{
id: 4,
name: "Doncasu",
image:
"https://s3-media3.fl.yelpcdn.com/bphoto/7F9eTTQ_yxaWIRytAu5feA/ls.jpg",
rating: 9.8,
},
{
id: 5,
name: "Kimbap",
image:
"http://cdn2.koreanbapsang.com/wp-content/uploads/2012/05/DSC_1238r-e1454170512295.jpg",
rating: 8.5,
},
];
function Food({ name, picture, rating }) {
return (
<div>
<h2>I like {name}</h2>
<h4>{rating}/5.0</h4>
<img src={picture} alt={name} />
</div>
);
}
Food.propTypes = {
name: PropTypes.string.isRequired,
picture: PropTypes.string.isRequired,
rating: PropTypes.number.isRequired,
};
function App() {
return (
<div>
{foodILike.map((dish) => (
<Food
key={dish.id}
name={dish.name}
picture={dish.image}
rating={dish.rating}
/>
))}
</div>
);
}
export default App;
'React > ReactJS로 영화 웹 서비스 만들기' 카테고리의 다른 글
| 11.1 All you need to know about State (2) | 2022.09.22 |
|---|---|
| 11.0 Class Components and State (0) | 2022.09.22 |
| 10.3 map Recap (0) | 2022.09.22 |
| 10.2 Dynamic Component Generation (0) | 2022.09.22 |
| 10.1 Reusable Components with JSX + Props (0) | 2022.09.21 |