[영화 웹 서비스 만들기] #2 JSX & PROPS (2) (Key prop , alt, PropTypes)

2021. 4. 5. 22:14·프로그래밍/React JS
320x100

본 포스팅은 리액트 JS를 다루고 있습니다.

#2.3 map Recap

Key prop (키 속성)

key prop을 작성하지 않고 위의 코드와 같이 실행시켰을 때 발생하는 오류이다.

위의 에러에 따르면 list내의 child는 unique한 key prop을 가져야 한다고 말하고 있다. 즉, 모든 react element들은 유일해야하고있다. 즉, 모든 react element들은 유일해야한다. list 안에 넣으면서 유일성을 잃어버리게 되므로 배열의 각각의 item에 id를 추가하고 component에 key라는 prop을 줌으로써 해결할 수있다.

 

위의 예시로 설명하면 배열에 있는 정보들은 모두 Food component 함수를 통해 Food component가 되고 우리에게 보여진다. 이렇게 모두 Food component가 되어버려 유일성을 상실한다. 결국 모든 element들이 Food component로 같아 보이게 되는 문제가 발생한다. 다른 이름, 다른 이미지를 가지고 있지만 react는 알지 못한다. 따라서 배열의 각각의 item에는 id를 추가하고 Food component에는 key라는 prop을 추가하여 이를 해결한다.

수정코드 (일부 발췌)

const foodILike = [
  {
    id: 1,
    name: "Kimchi",
    image: "http://aeriskitchen.com/wp-content/uploads/2008/09/kimchi_bokkeumbap_02-.jpg"
  },
  {
    id: 2,
    name: "Samgyeopsal",
    image: "https://3.bp.blogspot.com/-hKwIBxIVcQw/WfsewX3fhJI/AAAAAAAAALk/yHxnxFXcfx4ZKSfHS_RQNKjw3bAC03AnACLcBGAs/s400/DSC07624.jpg"
  },
  {
    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"
  },
  {
    id: 4,
    name: "Doncasu",
    image: "https://s3-media3.fl.yelpcdn.com/bphoto/7F9eTTQ_yxaWIRytAu5feA/ls.jpg"
  },
  {
    id: 5,
    name: "Kimbap",
    image: "http://cdn2.koreanbapsang.com/wp-content/uploads/2012/05/DSC_1238r-e1454170512295.jpg"
  }
];

function renderFood(dish){
  return <Food key = {dish.id} name={dish.name} picture={dish.image} />

}

function App() {
  return (
    <div>
      {foodILike.map(renderFood)}
    </div>
  );
}

export default App;

여기서 key prop은 Food component로 전달되지 않는다. React 내부에서 사용하기 위해 적는 것이다.

+) alt prop

image element는 반드시 alt prop이 있어야 한다. alt prop은 시각 장애인들을 위한 속성이다.

#2.4 Protection with PropTypes

만약 Food component 속성(prop)중 받지 못하거나 잘못 받는 내용이 있다면 이것을 확인할 방법이 필요하다. 잘못된 정보를 client에게 보내고 user가 그걸 보고 이해하지 못하는 경우를 막기 위해서이다.

Props Types

설치

콘솔창에 npm i(install을 의미) prop-types를 하면 된다.

prop-types는 내가 전달 받은 props(속성들)이 내가 원하는 props인지를 확인해 준다. 설치가 다 되었는지 확인하려면 package.json 파일에 가서 "dependencies"에 prop-types가 있는지 확인해보면 된다.

사용법

먼저 PropTypes를 prop-types로 부터 improt 해준다.

import PropTypes from "prop-types";

prop types를 사용하고 싶은 component 함수 아래 다음과 같은 형식으로 적는다.

Food.propTypes = {
  // 여기에 내가 얻고 싶은 props(속성들)에 대한 설명을 적는다.
  name: PropTypes.string.isRequired,
  picture: PropTypes.string.isRequired,
  rating: PropTypes.string.isRequired
};

Food.propTypes와 PropTypes.string.isRequired의 대소문자 구분에 유의하자. 또한 Food.propTypes의 propTypes는 다른 이름으로 바뀔 수 없다.

위의 예시에서 rating은 사실 number로 줬는데 string으로 받아야 한다고 되어있다. 이 경우 화면 출력에는 시각적인 에러가 나타나지 않지만 콘솔창을 보면 다음과 같은 에러를 볼 수 있다.

isRequired는 항상 쓸 필요는 없다. isRequired 을 없이 썼을 경우 값이 들어왔을 때만 PropTypes에 쓰여진 조건을 확인하고 값이 들어오지 않았으면 그냥 pass 한다. 즉, 위의 picture에서 예를 들면 undefined이거나 string이면 된다는 것이다.

320x100

'프로그래밍 > React JS' 카테고리의 다른 글

[영화 웹 서비스 만들기] #2 JSX & PROPS ( Component, forEach(), filter(), map() )  (14) 2021.04.02
[영화 웹 서비스 만들기] #1 SET UP (React란?, React App 만드는 법)  (5) 2021.03.31
'프로그래밍/React JS' 카테고리의 다른 글
  • [영화 웹 서비스 만들기] #2 JSX & PROPS ( Component, forEach(), filter(), map() )
  • [영화 웹 서비스 만들기] #1 SET UP (React란?, React App 만드는 법)
그릿_GRIT
그릿_GRIT
프로그래밍 하는 공머생의 자기개발 (프로그램 개발, 자기계발, 재테크) 기록
  • 그릿_GRIT
    공머생의 자기개발
    그릿_GRIT
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • 프로그래밍 (9)
        • JS (5)
        • HTML, CSS (1)
        • React JS (3)
        • UI&UX (0)
      • 재테크 (7)
        • 주식 (0)
        • 비트코인 (7)
      • 영상편집 (0)
      • 대외활동 (0)
      • 리뉴얼 예정 (8)
        • 업무자동화 (8)
      • 일상기록 (0)
        • 아르바이트 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    자바스크립트
    비트코인
    비트코인 공부
    Component
    JS 기초
    JS 강의 추천
    이더리움
    업비트
    코린이
    리액트
    리액트 JS
    노마드코더
    비트코인 시작
    자바스크립트 기초
    칼퇴
    패스트캠퍼스
    영화 웹
    업무자동화 강의
    react js
    영화 웹 서비스 만들기
    MACD
    스톰엑스
    react
    업무자동화
    비트코인 상승
    바닐라 js
    메디블록
    JS
    javascript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
그릿_GRIT
[영화 웹 서비스 만들기] #2 JSX & PROPS (2) (Key prop , alt, PropTypes)
상단으로

티스토리툴바