React Component 함수처럼 재사용하는 방법

React Component 함수처럼 재사용하는 방법

2023-03-22

안녕하세요.

지난 시간에는 React에서 여러개의 element를 생성하는 방법에 대해서 알아봤습니다.

이번 시간에는 한개의 함수를 React Component로 변환해보고 그 React Component를 함수처럼 재사용하는 방법에 대해서 알아보겠습니다.

우선 하나의 message 함수를 만들고 여러번 재사용해 보겠습니다.

<!DOCTYPE html>
<html lang="en">
<body>
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <div id="root"></div>
  <script type="text/babel">
    const rootElement = document.getElementById("root");
    const message = () => (
      <>
        <h1>안녕하세요.</h1>
      </>
    );

    const element = (
      <>
        {message()}
        {message()}
      </>
    );

    ReactDOM.render(element, rootElement);

  </script>
</body>
</html>

이렇게 하면 "안녕하세요."라는 문구가 두번 출력됩니다.

이번에는 함수에 인자를 넣어서 재사용해 보겠습니다.

<!DOCTYPE html>
<html lang="en">
<body>
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <div id="root"></div>
  <script type="text/babel">
    const rootElement = document.getElementById("root");
    const message = (name, title) => (
      <>
        <h1>{name} {title}, 안녕하세요. </h1>
      </>
    );

    const element = (
      <>
        {message("문동은", "대리")}
        {message("주여정", "부장")}
      </>
    );

    ReactDOM.render(element, rootElement);

  </script>
</body>
</html>

이렇게 하면 "문동은 대리님, 안녕하세요."와 "주여정 부장님, 안녕하세요."라는 문구가 출력됩니다.

이번에는 함수 대신에 React Component로 만들어서 재사용해 보겠습니다.

<!DOCTYPE html>
<html lang="en">
<body>
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <div id="root"></div>
  <script type="text/babel">
    const rootElement = document.getElementById("root");
    const message = (name, title) => (
      <>
        <h1>{name} {title}, 안녕하세요. </h1>
      </>
    );

    const Message = ({name, title}) => {
      return (
        <>
          <h1>{name} {title}, 안녕하세요. </h1>
        </>
      );
    }

    const element = (
      <>
        {message("문동은", "대리")}
        {message("주여정", "부장")}
        <Message name="문동은" title="사원" />
      </>
    );

    ReactDOM.render(element, rootElement);

  </script>
</body>
</html>

이렇게 message 함수를 Message React Component로 만들어 재사용할 수 있습니다.

React Component에서 인자값이 중괄호로 감싸져 있는 부분은 props라고 부릅니다.

그리고 함수일 때는 함수명이 소문자로 시작하고 React Component일 때는 함수명이 대문자로 시작하는 점 유의해야 합니다.

그 이유는 React Component를 기존의 html 태그와 구분하기 위해서입니다.

또한 중괄호 안에는 props의 속성이 들어가므로 children 도 인자로 받을 수 있습니다.

<!DOCTYPE html>
<html lang="en">
<body>
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <div id="root"></div>
  <script type="text/babel">
    const rootElement = document.getElementById("root");
    
    const Message = ({name, title, children}) => {
      return (
        <>
          <h1>{name} {title}, 안녕하세요. </h1>
          {children}
        </>
      );
    }

    const Good = () => <h3>좋은 아침입니다.</h3>

    const element = (
      <>
        <Message name="문동은" title="사원">
          <Good />
          <Good />
        </Message>
      </>
    );

    ReactDOM.render(element, rootElement);

  </script>
</body>
</html>

이렇게 하면 React Component 안에 다른 태그도 함께 넣어서 사용할 수 있습니다.

이렇게 React Component를 만들어서 재사용할 수 있습니다.

감사합니다.

< 목록으로 돌아가기