더북(TheBook)

9.7.4 리팩토링하기

여기까지 구현하고 나니 FeedScreen에서 사용한 코드와 Profile에서 사용한 코드가 굉장히 유사하죠? 코드를 재사용할 수 있도록 리팩토링해봅시다.

아예 해당 로직을 usePosts에 구현할 수도 있고, usePostsEventEffect라는 Hook을 또 만들어서 해당 Hook을 usePosts에서 사용하는 형태로 구현할 수도 있습니다.

우리는 usePostsEventEffect Hook을 만드는 방식으로 구현하겠습니다. 우선 이번에 FeedScreenProfile에서 작성한 useEffect를 모두 지워주세요.

해당 Hook을 다음과 같이 작성해주세요.

hooks/usePostsEventEffect.js

import {useEffect} from 'react';
import events from '../lib/events';

export default function usePostsEventEffect({refresh, removePost, enabled}) {
  useEffect(() => {
    if (!enabled) {
        return;
    }
    events.addListener('refresh', refresh);
    events.addListener('removePost', removePost);
    return () => {
      events.removeListener('refresh', refresh);
      events.removeListener('removePost', removePost);
    };
  }, [refresh, removePost, enabled]);
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.