목차
- 커스텀 훅으로 분리
- 문제의식
- 목표
- 기준
- 리팩토링 진행
- 결과
커스텀 훅으로 분리
문제의식
우리 애플리케이션의 특성상 다양한 페이지에서 서로 접근이 가능하다. 이 부분에 관해 살펴보니, myPageCommentReview
, myPageLikeReview
, myPageReview
, reviewEditPage
, reviewPage
등에서 reviewDetailPage
로 이동이 가능했는데, 모두 동일한 함수를 각 페이지에서 선언 및 사용하고 있었다. 다른 페이지에서도 이와 동일한 상황이었다.
동일한 함수를 사용하고 있으므로 함수로 분리할 수 있으나, useHistory
를 사용하고 있어서 커스텀 훅으로 분리할 수 있다고 생각했다.
목표
목표는 현재 사용되고 있는 모든 커스텀 훅을 사용해서 history.push()
를 모두 지우는 것이다.
기준
커스텀 훅의 형태를 어떻게 만들 것인지 먼저 고민했다.
// case 1.
const { goAPage } = useMovePage(pathA);
const { goBPage } = useMovePage(pathB);
// case 2.
const {goAPage, goBPage} = useMovePage();
커스텀 훅의 형태를 case 1
과 case 2
로 구현할 수 있다. case 1
은 path를 받아 export 한 함수를 사용하는 방법이다. 이 방법은 한 페이지에서 다른 페이지로 이동하는 함수가 여러 개인 경우, 그 개수만큼 커스텀 훅을 호출 해야 하는 단점이 있다. 두 번째 방법은 커스텀 훅 내에 모든 페이지로 이동하는 함수를 각각 만들어 그 함수들을 사용하는 방법이다. 이 방식은 case 1
에 비해 커스텀 훅을 호출하는 횟수도 적고, 줄어드는 코드 라인의 수도 많아서 case 2
방식을 선택했다.
또 다른 기준으로 페이지로 이동하면서 상태를 같이 보내는 함수이다.
// case 1.
goSignupPage({
socialProvider,
socialId,
socialProfilUrl
});
// case 2.
goSignupPage();
goSignUp
함수의 경우 한 번만 사용되는데, 사용하는 곳도 state
를 같이 넘기고 있어서, case 2
처럼 커스텀 훅에 state
를 선언하고, 바깥에는 간단하게 사용하는 것이 가능하다. 하지만, state
라는 특수한 정보가 커스텀 훅 안에 선언된다면 새로운 개발자가 해당 코드의 오류나 특이 사항을 발견했을 때, 커스텀 훅 코드 내부 내용까지 살펴봐야 한다는 점에서 개발자 친화적이라고 생각하지 않았다. 따라서 명시적으로 같이 넘기는 state
를 나타내는 방식인 case 1
을 선택했다.
리팩토링 진행
useMovePage
커스텀 훅을 만들어서 모두 적용했다. state
를 반드시 넘기는 함수 goSignupPage
는 &&
를 사용하여 인자로 state
가 잘 들어오는 경우만 동작하도록 했고, goReviewPage
의 인자가 있는 경우와 없는 경우 분기를 나누어 삼항식을 사용했다.
결과
커스텀 훅으로 만들어 분리하면서, history
관련 코드 대부분이 사라져 코드량이 줄어드는 동시에 불필요하게 반복되는 함수의 반복적인 사용을 줄일 수 있었다.
'Projects > 2021-CVI (백중원)' 카테고리의 다른 글
211021(목) - 렌더링 성능 개선 with 도넛 차트 (0) | 2021.10.21 |
---|---|
211015(금) - 1.0.0 release 및 앞으로의 Git 전략 (0) | 2021.10.15 |
211004(월) - 서비스 API 관련 부분 리팩토링 (0) | 2021.10.04 |
211001(금) - 컴포넌트 디렉터리 구조 변경 (0) | 2021.10.01 |
210930(목) - 전체 회의 README.md 논의 / 프론트엔드 회의 및 회고 (2) | 2021.09.30 |
댓글