React - Component & Props

이소라·2022년 7월 22일
0

React

목록 보기
2/23

Component

  • UI에서 재사용 가능한 개별적인 요소
  • 데이터가 주어졌을 때, 그 데이터에 맞춰 UI를 만듬
  • 라이프사이클 API를 이용하여, 컴포넌트가 화면에 나타날 때, 사라질 때, 변화가 일어날 때 주어진 작업들을 처리할 수 있음
  • 임의 메서드를 만들어 특별한 기능을 붙여줄 수 있음
  • 컴포넌트 선언 방식 : 클래스형 컴포넌트, 함수형 컴포넌트

Class Component

  • 클래스형 컴포넌트는 함수 컴포넌트와 다르게 state, 라이프사이클 기능을 사용할 수 있고, 임의의 메서드를 정의할 수 있음
  • 클래스형 컴포넌트에 render 함수가 있어야 하고, render 함수에서 JSX를 반환해야함
import { Component } from 'react';

class App extends Component {
  render() {
    const name = 'react';
    return <div className="react">{name}</div>;
  }
}

export default App;

Functional Component

  • 함수 컴포넌트는 클래스형 컴포넌트보다 선언하기가 편하고, 메모리 자원을 덜 사용함
  • 예전에는 state와 라이프사이클 API를 사용할 수 없었지만, Hooks 기능이 도입되면서 해결됨
function App() {
  const name = 'react';
  return <div className="react">{name}</div>;
  }

export default App;



Props

  • props는 컴포넌트의 속성을 설정할 때 사용하는 요소임
  • props값은 컴포넌트 함수의 매개변수로 받아서 사용할 수 있음
  • JSX 내부에서 { } 안에서 사용함
const MyComponent = props => {
  return <div>안녕하세요, 제 이름은 {props.name}입니다</div>
}

export default MyComponent;

props 기본값 설정: defaultProps

  • defaultProps : props값을 따로 지정하지 않았을 때 보여줄 기본값을 설정
const MyComponent = props => {
  return <div>안녕하세요, 제 이름은 {props.name}입니다</div>
}

MyComponent.defaultProps = {
  name: '기본 이름'
};

export default MyComponent;

태그 사이의 내용을 보여 주는 children

  • children : 컴포넌트 태그 사이의 내용을 보여주는 props 속성
// App.jsx
import MyComponent from './MyComponent';

const App = () => {
  return <MyComponent>리액트</MyComponent>;
}

const MyComponent = props => {
  return <div>
    <div>안녕하세요, 제 이름은 {props.name}입니다. <br />
      children 값은 {props.children}입니다.
    </div>
  </div>
}

MyComponent.defaultProps = {
  name: '기본 이름'
};

export default MyComponent;

비구조화 할당 문법을 통해 props 내부 값 추출

  • 비구조화 할당(destructuring assignment)를 사용하여 props 객체에서 값을 추출하여 사용함
const MyComponent = props => {
  const {name, children } = props;
  return <div>
    <div>안녕하세요, 제 이름은 {name}입니다. <br />
      children 값은 {children}입니다.
    </div>
  </div>
}

MyComponent.defaultProps = {
  name: '기본 이름'
};

export default MyComponent;

propTypes를 통한 props 검증

  • 컴포넌트의 필수 props를 지정하거나 props의 타입을 지정할 때 propTypes를 사용함
import PropTypes from 'prop-types';

const MyComponent = props => {
  return <div>안녕하세요, 제 이름은 {props.name}입니다</div>
}

MyComponent.defaultProps = {
  name: '기본 이름'
};

MyComponent.propTypes = {
  name: PropTypes.string
}

export default MyComponent;
  • 필수 propTypes 설정
    • propTypes를 지정할 때 뒤에 isRequired를 붙여줌
    • 필수 propTypes로 설정된 속성은 지정하지 않을 경우 경고창이 뜸
import PropTypes from 'prop-types';

const MyComponent = props => {
  return <div>
    <div>안녕하세요, 제 이름은 {props.name}입니다. <br />
      제가 좋아하는 숫자는 {props.favoriteNumber}입니다</div>
  </div>
}

MyComponent.defaultProps = {
  name: '기본 이름',
  favoriteNumber : 0
};

MyComponent.propTypes = {
  name: PropTypes.string.isRequired,
  favoriteNumber : PropTypes.number
}

export default MyComponent;
  • PropTypes 종류
    • array : 배열
    • arrayOf(PropType) : 특정 PropType으로 이루어진 배열
    • bool : true 혹은 false 값
    • func : 함수
    • number : 숫자
    • object : 객체
    • string : 문자열
    • symbol : ES6의 Symbol
    • node : 렌더링할 수 있는 모든 것(숫자, 문자열, JSX 코드, children 등)
    • instanceOf(Class) : 특정 Class의 인스턴스
    • oneOf(['dog', 'cat', ...]) : 주어진 배열의 요소 중 값 하나
    • oneOfType([PropType, PropType, ...]) : 주어진 PropType 배열의 요소 중 하나
    • objectOf(PropType) : 객체의 모든 키 값이 특정 PropType인 객체
    • shape({ name: PropTypes.string, num: PropTypes.number }) : 주어진 스키마를 가진 객체
    • any : 아무 종류

클래스형 컴포넌트에서 props 사용하기

import { Component } from 'react';
import PropTypes from 'prop-types';

class MyComponent extends Component {
  render() {
    const { name, favoriteNumber } = this.props;
  }
  return import PropTypes from 'prop-types';

const MyComponent = props => {
  return (
    <div>
      안녕하세요, 제 이름은 {props.name}입니다. <br />
      제가 좋아하는 숫자는 {props.favoriteNumber}입니다
    </div>)
}

MyComponent.defaultProps = {
  name: '기본 이름',
  favoriteNumber : 0
};

MyComponent.propTypes = {
  name: PropTypes.string.isRequired,
  favoriteNumber : PropTypes.number
}

export default MyComponent;
  • 클래스형 컴포넌트에서 defaultProps와 propTypes를 설정할 때 static 키워드를 사용해서 클래스 내부에서 지정 가능함
import { Component } from 'react';
import PropTypes from 'prop-types';

class MyComponent extends Component {
  static defaultProps = {
  name: '기본 이름',
  favoriteNumber : 0
  };
  static propTypes = {
  name: PropTypes.string.isRequired,
  favoriteNumber : PropTypes.number
  };
  render() {
    const { name, favoriteNumber } = this.props;
  }
  return import PropTypes from 'prop-types';

const MyComponent = props => {
  return (
    <div>
      안녕하세요, 제 이름은 {props.name}입니다. <br />
      제가 좋아하는 숫자는 {props.favoriteNumber}입니다
    </div>)
}

export default MyComponent;

0개의 댓글