컴포넌트 Props 디자인

1. 컴포넌트 Props 설계

1.1 사용자가 전달 해야 하는 props

  • 사용자가 값을 던지면 속성으로 설정 되기 때문에 꼭 속성을 명시할 필요는 없다. → ...restProps에 동적으로 포함 되로록 설정할 수 있다.

  • ...restProps에 포함 되지 않도록 속성을 객체로 전달해서 원하는 요소에 속성을 적용할 수 있다.

1.2 요소가 가지고 있어야할 props

  • 요소가 기본적으로 가질 속성을 설정할 경우 nullish 연산자/ 3항식을 사용해서 기본값을 설정할 수 있다.

  • 속성의 true/false 설정으로 두 개의 속성을 한 번에 제어할 수 있다.

컴포넌트를 Props를 설계할 때 크게 구분해야 하는 것은 위의 두 부분이다. 전달할 것인가? 기본적으로 갖고 있을 것인가?

1.3 추가적으로 설정할 수 있는 것

  • 필수로 전달할 속성과 속성의 유형을 설정할 수 있다. → propTypes

1.4 부모 컴포넌트 AppHeader

import './AppHeader.scss'
import React from 'react'
import AppHomeLink from '../AppHomeLink/AppHomeLink'
import AppNavigation from '../AppNavigation/AppNavigation'

const AppHeader = () => {
  return (
    <header className="appHeader">
      <AppHomeLink title="홈 페이지로 이동">
        <span className="a11yHidden" lang="en">
          EDIYA COFFEE
        </span>
      </AppHomeLink>
      <AppNavigation />
    </header>
  )
}

export default AppHeader

2. classNames 설정

클래스 이름을 같이 중첩하여 사용하고 싶을 때 사용한다.

classNames을 사용하지 않으면 아래의 로직으로 사용자가 직접 커스텀으로 만들어서 사용할 수 있다.

3. 특정 요소에 속성 전달

하나의 요소가 아닌 컴포넌트의 다른 요소에 속성을 전달하고 싶은 경우가 있다. 이 경우엔 해당 요소에 전달할 속성을 객체로 전달하고 전개연산자를 사용하면 편하다.

3.1 부모 컴포넌트

3.2 자식 컴포넌트

4. 요소 별칭 등록

as 속성을 사용해서 별칭을 등록할 수 있다.

4.1 부모 컴포넌트

4.2 자식 컴포넌트

5. props 전개

컴포넌트로 전달된 props 객체를 전개(spread) 하여 컴포넌트의 내부의 구조(Markup)에 모두 추가 설정할 수 있다.

다만, props 객체의 속성을 전개하였을 때 사용된 external과 같은 비 표준 속성은 오류를 발생시킨다.

오류 메시지에서 해결책을 안내하고 있지만, 안내 방법대로 해도 해결이 안되는 경우가 있다. 이런 경우 컴포넌트로 전달된 props에서 비 표준 속성을 걸러내어 문제를 해결 할 수 있다. (<a> DOM Node에 설정되는 속성이므로 aNodeProps라는 이름을 사용했습니다)

6. props 검사

PropTypes를 사용하여 컴포넌트에 전달된 props를 검사하도록 설정한다.

7. props 기본 값

필요한 경우 컴포넌트의 전달 속성인 props 객체의 속성 중 일부에 기본 값을 설정할 수 있다.

8. 다른 예제 보기

8.1 컴포넌트 추출 전 코드

8.2 컴포넌트 추출 후 부모 컴포넌트

8.3 AppButton 컴포넌트

Last updated

Was this helpful?