[javascript] 리액트에서 컴포넌트 컨테이너 패턴의 사용 방법

리액트 애플리케이션을 개발할 때 컴포넌트 컨테이너 패턴은 stateful한 로직을 처리하는 컴포넌트와 UI를 담당하는 컴포넌트를 분리하여 코드를 구조화하는 방법 중 하나입니다. 이 패턴을 사용하면 애플리케이션의 유지보수성과 재사용성을 높일 수 있습니다.

컴포넌트 컨테이너 패턴이란?

컴포넌트 컨테이너 패턴은 컴포넌트를 상태(states)와 로직(logic)을 처리하는 컨테이너 컴포넌트UI를 렌더링하는 프레젠테이셔널 컴포넌트로 분리하는 구조를 말합니다. 이를 통해 컴포넌트 간의 역할을 명확히 구분할 수 있고, 각 컴포넌트를 독립적으로 테스트하고 재사용할 수 있습니다.

컴포넌트 컨테이너 패턴의 장점

컴포넌트 컨테이너 패턴을 사용하면 다음과 같은 장점을 얻을 수 있습니다:

컴포넌트 컨테이너 패턴 구현 예시

다음은 컨테이너 컴포넌트와 프레젠테이셔널 컴포넌트를 분리하여 작성한 예시 코드입니다.

컨테이너 컴포넌트

import React, { useState, useEffect } from 'react';
import UserDataService from './services/UserDataService';
import UserList from './UserList';

const UserContainer = () => {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    UserDataService.getUsers()
      .then(response => setUsers(response.data))
      .catch(error => console.error(error));
  }, []);

  return <UserList users={users} />;
};

export default UserContainer;

프레젠테이셔널 컴포넌트

import React from 'react';

const UserList = ({ users }) => {
  return (
    <div>
      <h1>User List</h1>
      <ul>
        {users.map(user => (
          <li key={user.id}>{user.name}</li>
        ))}
      </ul>
    </div>
  );
};

export default UserList;

위 코드에서 UserContainer는 사용자 데이터를 가져와 상태를 관리하는 역할을 하며, UserList는 사용자 목록을 렌더링하는 역할을 합니다.

이와 같이 컴포넌트 컨테이너 패턴을 사용하여 컴포넌트를 구성하면 각 컴포넌트들이 담당하는 역할이 명확해지고, 코드의 가독성과 유지보수성이 향상됩니다.

컴포넌트 컨테이너 패턴은 리액트 애플리케이션의 구조화에 도움을 주는 강력한 디자인 패턴 중 하나입니다.

참고 자료

이상으로 리액트에서 컴포넌트 컨테이너 패턴의 사용 방법에 대해 알아보았습니다.