[HOC] about HOC(Higher Order Component)

2022. 9. 13. 22:53·Frontend/React

1. HOC 란 ?

Higher Order Component의 약자로, 다른 컴포넌트를 받아서 새로운 컴포넌트를 반환하는 함수이다.

const EnhancedComponent = higherOrderComponent(WrappedComponent);

 

 

2. HOC을 쓰는 방법

말로 하기보다 예시가 더 이해가 잘 될 것 같다. 아래는 인증 과정에서 HOC의 쓰임에 대한 예시다.

로그인한 user는 로그인/회원가입 페이지에 들어갈 수 없고, 일반 user는 admin 페이지에 들어갈 수 없다. 이게 가능하려면 일단 각 페이지에 들어갈 때마다 user의 상태, 역할을 서버로부터 받아와야 한다. 서로 다른 컴포넌트들이 user의 상태, 역할을 얻는 공통적인 작업을 수행하는 것은 비효율적이다. 그래서 그 작업을 수행하는 HOC을 만든다. HOC은 다른 컴포넌트들을 생성한다.

예를 들어 아래처럼 생긴 HOC가 있다고 하자. (* HOC는 with로 시작하는 컨벤션이 있다.)

import { LoginPage } from './views/LoginPage'

export function withLogined(InputComponent) {
  return () => {
    const { isLogined } = getUserInfo().loginState;
    return isLogined ? <InputComponent /> : <LoginPage>;    // 컴포넌트를 반환
  };
}

InputComponent는 user가 로그인했는지 체크한 다음 로그인 여부에 따라 InputComponent나 LoginPage로 보낸다. withLogined(LikePage)나 withLogined(CommentPage) 등 로그인 여부부터 체크해야 하는 페이지(=Component)가 있는 경우 이 HOC을 사용할 수 있다.

 

 

3. HOC의 단점

  • withBlahBlah(withBlah(withLogined(LikePage)))와 같이 depth가 깊어지는 경우, 가독성도 구리고 이해하기도 어렵다. 어떤 인자가 어디로 들어가서 어디로 나오고 반환되는 컴포넌트가 무엇인지 알기가 힘들다.
  • HOC의 props와 inner props의 이름이 서로 겹친다.

HOC은 class형 컴포넌트를 주로 사용할 적에 쓰던 것이고, 함수형 컴포넌트를 주로 사용하는 요즘에는 Hooks으로 HOC을 대체할 수 있다. Hooks는 HOC의 단점을 커버하기도 한다.

 

 

참고한 글: https://ostarblog.tistory.com/12

저작자표시 (새창열림)

'Frontend > React' 카테고리의 다른 글

리액트의 이벤트 처리 방식 까보기  (0) 2025.03.11
useState의 setState에 함수 넣기 (Functional Update)  (0) 2023.08.17
[react] 달력 만들기 01  (0) 2023.01.31
[Redux Tutorial] Login page 만들며 Redux 이해하기  (0) 2022.09.13
[Redux Tutorial] about Redux  (0) 2022.09.13
'Frontend/React' 카테고리의 다른 글
  • useState의 setState에 함수 넣기 (Functional Update)
  • [react] 달력 만들기 01
  • [Redux Tutorial] Login page 만들며 Redux 이해하기
  • [Redux Tutorial] about Redux
톱치
톱치
나를 위한 기록을 합니다
  • 톱치
    기록
    톱치
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 전체보기 (51)
      • Articles (0)
      • Frontend (3)
        • JS, TS (16)
        • HTML, CSS (5)
        • React (6)
        • Dart (3)
      • Backend (6)
      • Others (3)
      • Algorithm (5)
      • 회고 (4)
  • 링크

    • GitHub
  • 태그

    React
    css
    object
    login
    TypeScript
    회고
    프리코스
    dart
    BCrypt
    javascript
    Node
    programmers
    ts
    우아한테크코스
    BFS
    todolist
    node.js
    token
    Redux
    js
  • hELLO· Designed By정상우.v4.10.3
톱치
[HOC] about HOC(Higher Order Component)
상단으로

티스토리툴바