Front-end/React.js

2. JSX & Props - 웹 서비스 만들기 | 노마드코더

AGAL 2020. 3. 5. 22:35
반응형

[출처 : https://academy.nomadcoders.co]

0. Creating your first React Component

# component : HTML을 반환하는 함수    *<App /> : 컴포넌트를 사용하는 태그

 

# import React form "react";  파일 최상단에 이 코드가 없으면 해당 파일에 jsx가 있는 컴포넌트를 사용하는 것을 react는 이해하지 못함 

 

! react application이 하나의 컴포넌트만을 렌더링하며, 그 컴포넌트는 App이다. 따라서 다른 컴포넌트는 App 안에 위치해야 한다.


1. Reusable Components with JSX + Props

# jsx는 컴포넌트에 정보를 보낼 수 있다.

 

# props : 컴포넌트에서 하위 컴포넌트(Children component)로 정보를 보내는 방법    *property=value

 - value는 문자열, 불리언, 객체, 배열, 어떤 것도 올 수 있다.

 - 상위 컴포넌트의 props는 하위 컴포넌트의 arguments(인자)로 전달된다.

/* 상위 컴포넌트 */
function App(){
  return (
    <Gundam name="ASTARY" code="MBF-P02"/>
  )
}

/* 하위 컴포넌트 */
function Gundam({name,code}){    // props 디스트럭처링
  return <h2>I Like {code} {name} Gundam.</h2>
}
// 위 코드와 동일하다
function Gundam(porps){
  return <h2>I Like {porps.code} {porps.name} Gundam.</h2>
}

2. Dynamic Component Generation

# Array.map(callback(currentValue[, index[, array]])[, thisArg])

: 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.

ㆍcallback : 새로운 배열 요소를 생성하는 함수. 다음 세 가지 인수를 가집니다.

  - currentValue처리할 현재 요소.

  - index(optional) : 처리할 현재 요소의 인덱스.

  - array(optional) : map()을 호출한 배열.

ㆍthisArg(optional) :callback을 실행할 때 this로 사용되는 값.

const gundamList = [
  {name:"Kyshatria", code:"NZ-666"},
  {name:"Astray", code:"MBF-P02"},
  {name:"Tollgeese", code:"OZ-00MS"}
]
function App() {
  return (
    {gundamList.map(ms => {
      return <Gundam name={ms.name} code={ms.code}/>
    })}
  )
}

// HTML View
I Like NZ-666 Kyshatria Gundam
I Like MBF-P02 Astray Gundam
I Like OZ-00MS Tollgeese Gundam

 


3. map Recap

! Warning: Each child in a list should have a unique "key" prop.

 : 모든 react의 element들은 유일해야 하는데 element들을 list 안으로 넣으면 유일성을 잃어버린다.

 ⇒ element 각 각에 id를 부여하고 "key" prop의 value로 해당 id 값을 부여한다.    * key={this.props.id}


4. Protection with PropTypes

> npm i prop-types  전달 받은 props가 원하는 props인 지를 확인

 * propTypes 로 코드를 써야한다.

import propTypes from "prop-types";

// 컴포넌트이름.propType = { 컴포넌트의 property : 체크하려는 타입}
Food.propTypes = {
  name : propTypes.string.isRequired,
  code : propTypes.string.isRequired,    // code가 string이 아니면 콘솔 에러
  rating : propTypes.number    // rating이 number 또는 undefined가 아니면 콘솔 에러
}

 

※ 확인 가능한 타입들

Array, boolean, function, number, object, string, symbol, node, element, instanceOf, Oneof, shape 등등

 

반응형