마이크로 프론트엔드 - 공통 커스텀훅 만들기

그냥차차·2025년 1월 7일

리엑트

목록 보기
10/10

1. 공통 커스텀훅 만들게 된 이유

  • 마이크로 프론트엔드는 같은 디렉토리를 공유하는게 아니기 때문에 프로젝트마다 훅을 만들어서 중복되어 사용하는 문제가 있음
  • 현재 서비스가 서울, 울주의 서비스가 배포가 되어있는 상황인데 일정부분의 프로젝트를 공유해서 사용할때 유저가 접속한 사이트가 서울 서비스인지 울주 서비스인지 구분지어서 보여줘야할때가 있었는데
  • 이때 나온 방법이 아래와 같은데 ㄱ, ㄴ은 확장성과 유지보수성이 좋지않을꺼같아서 ㄷ로 하기로 함
    ㄱ. 유저가 로그인시 세션, 로컬 스토리지에 접속한 서비스명을 박는다.
    ㄴ. url에 ulju가 포함되어 있다면 각각 디렉토리에서 사용하는 nav의 path에 /ulju/를 추가해준다.
    ㄷ. 커스텀 훅을 만들어서 공통으로 사용하게 한다

2. 글로벌 네비게이트

  • 아래 코드를 사용해서 평범한 네비게이트 훅을 만들어준다
import { useNavigate, useLocation } from "react-router-dom";
export default function useGlobalNavigate() {
  const navigate = useNavigate();
  const { pathname } = useLocation();
  const hubKeywords = ["ulju"];
  const isUlju = hubKeywords.some((keyword) => pathname.includes(keyword));
  const GlobalNavigate = (url) => {
    const basePath = isUlju ? `/ulju` : "";
    navigate(`${basePath}/${url}`);
  };
  return GlobalNavigate;
}

3. config 설정

  • 아래와 같이 config를 설정해서 만들어낸 커스텀훅을 exposes 해둔다 이외에도 다른설정을 해야함
plugins :[
 new ModuleFederationPlugin({
 exposes: {
        "./GlobalNavigate": "./src/utils/useGlobalNavigate",
      },
})
]

4. import 하기

  • 그다음 만들어둔 커스텀훅을 사용할 다른 프로젝트에서 import를 해준다.
  • 이때도 config 설정을 해두어야함
  • 아래와 같이 import를 해두고
import useGlobalNavigate from "app_shell/GlobalNavigate";
  • 일반 useNavigate와 쓰는것과 동일하게 사용하면 됨~
  const globalNavigate = useGlobalNavigate();
profile
개발작

0개의 댓글