카카오 헤더 리팩토링

미마모코딩·2022년 9월 12일
0

카카오 헤더 영역

목록 보기
5/5
post-thumbnail

카카오 헤더영역에서 영어버전 분기처리를 하다가 며칠동안 고생을 하고있다.

부족한 네이밍 디테일 , 설계를 생각하지 않은 기능구현에만 초점을 둔 탓이었다.

(네이밍을 대충했기에 코드를 다시 볼 때 불필요하게 시간이 많이 들었다.)

그래서 규격부터 하나하나 설계하고 , 왜 이게 필요한지 사고하던중 영어 페이지 컴포넌트 자체가

전펴 필요 없다는것을 깨우쳤다.

아래는 내가 설계한 구조이다.

        KaKaoContainer. (함수를 전부 가지고 있는 최상위 레벨)   
                | 
           kakaoLayOut                                               
      /         |         \
 KakaoTop  childrenCompo    KakaoFooter
  /   \   \
Header gNb util     

문제를 해결하기 위해선 kakaoTop Component에서 분기처리를 맡아야했다.

고안해낸 방법은 아래있다.

const router =useRouter();

const {language} = router.query

이것을 토대로

import Link from "next/link";
import Router, { useRouter } from "next/router";
import React, { FC, useState } from "react";

import Gnb from "../../../gnb/Gnb";
import HeaderUtilSearchBar from "../../../headerUtilSearchArea/HeaderUtilSearchBar";

import Util from "../../../utilarea/Util";

interface Props {
  searchUtilClick: Function;
  isSearchUtilClick: boolean;
  isAnimate: boolean;
  searchCloseHandler: () => void;
  animateDelete: () => void;
}
const KaKaoTop: FC<Props> = ({
  searchUtilClick,
  isSearchUtilClick,

  isAnimate,
  searchCloseHandler,
  animateDelete,
}) => {
  const router = useRouter();
  const { language } = router.query;
  return (
    <div>
      <header className="flex items-center w-[1296px] h-[72px] m-auto ">
        <Link href="/kakao?language=korea">
          <h1
            className="w-[74px] h-[25px] font-light cursor-pointer"
            // h1태그엔 버튼 다는것보다 이걸 감싸는 linK가 필요함
          >
            KaKao
          </h1>
        </Link>
        {language === "korea" && isSearchUtilClick === false ? (
          <div className="flex text-center ">
            <Gnb language={language} />
            <Util searchUtilClick={searchUtilClick} />
          </div>
        ) : null}
        {language === "english" && isSearchUtilClick === false ? (
          <div className="flex text-center ">
            <Gnb language={language} />
            <Util searchUtilClick={searchUtilClick} />
          </div>
        ) : null}
      </header>
      {language === "korea" && isSearchUtilClick === true ? (
        <HeaderUtilSearchBar
          language={language}
          isAnimate={isAnimate}
          searchCloseHandler={searchCloseHandler}
          animateDelete={animateDelete}
        />
      ) : null}
      {language === "english" && isSearchUtilClick === true ? (
        <HeaderUtilSearchBar
          language={language}
          // language={language}
          isAnimate={isAnimate}
          searchCloseHandler={searchCloseHandler}
          animateDelete={animateDelete}
        />
      ) : null}
    </div>
  );
};

export default KaKaoTop;

쿼리값을 사용해 분기처리를 헤더영역에서 맡아서 하니 컴포넌트가 총 4개 줄었고 페이지도 하나 줄었다.

기존에 엉켜있는 컴포넌트를 제거하고 코드를 재사용하니 내가 직접적으러 봐야하는 내용이 절반이상 줄었으며 코드도 더 깔끔해졌다.

오늘 느낀 것은 기능구현이 당장 중요한건 아니구나 싶었다.

조금 더 큰 그림을 볼 줄 알고 설계 할 수 있는 사람이 되고싶다는 생각이 강하게 들었다.

이제는 next에서 있는 i18n을 공부해보려고 한다.

어려웠던 내용들이 하나하나 익숙해지는 과정이 나한텐 값지며 더 잘하고 싶다는 생각을 일으킨다.

0개의 댓글

관련 채용 정보