Props를 받아 어떻게 처리하는지 알아봅시다


먼저 Number 컴포넌트를 작성해봅시다.

import React from "react";
import styled from "styled-components";

const Count = styled.div`
  padding: 5px 0;
  width: 200px;
  text-align: center;
  border: 1px solid black;
  font-size: 2rem;
`;

const Number = props => {
  return <Count>{props.number}</Count>;
};

export default Number;

props는 위와 같이 함수의 인자로 받아옵니다. props는 number가 담긴 객체로 props.[속성명] 이런 식으로 사용합니다. 그런데 여기서 Destructing Assignment를 활용하면 코드를 더 간단하게 바꿀 수 있습니다. 아래의 코드를 확인해보세요.

// Destructing Assignment 문법을 통해 props 안에 있는 number를 가져옴
const Number = ({ number }) => {
  return <Count>{number}</Count>;
};

이런식으로 props를 받아서 화면에 출력을 해줍니다. 그럼 이제 App 컴포넌트에서 Number 컴포넌트를 불러와 state 값을 전달해보겠습니다.

import React, { Component } from "react";
import Number from "./components/Number";
import styled from "styled-components";

(생략)

class App extends Component {
  state = {
    number: 0
  };

  // 1. state를 업데이트하는 함수를 전달
  countUp = () => {
    this.setState(({ number }) => ({
      number: number + 1
    }));
  };

  // 2. setState 함수 앞에서 값을 받고 이를 전달
  countDown = () => {
    const { number } = this.state;
    this.setState({ number: number - 1 });
  };

  render() {
    // Destructing Assignment 문법을 사용한 방식
    const { countUp, countDown } = this;
    const { number } = this.state;

    return (
			<Wrapper>
        <ButtonWrapper>
          <button onClick={countUp}>+</button>
          <button onClick={countDown}>-</button>
        </ButtonWrapper>
        <Number number={number} />
      </Wrapper>
    );
  }
}

export default App;

이렇게 하면 스타일이 적용된 상태로 숫자 값이 화면에 표시될 것입니다. 다음으로 CountButton 컴포넌트를 작성해보도록 하겠습니다. 이 컴포넌트에는 버튼 안에 들어갈 텍스트와 클릭 시 실행될 함수를 Props로 전달하겠습니다.