권한 분기에서 사용자에 따라 다른 페이지를 보여주고 싶다 했을 때 예를 들어 로그인을 한 유저와 하지 않은 유저가 있을 때 로그인을 하지 않은 유저에게는 로그인을 해주세요 라는 페이지를 보여주고 싶다면 모든 페이지에 하나씩 적용해줘야 하는데 HOC 를 사용하여 한번만 만들고 컴포넌트 앞에 붙여주면 간단하게 권한 체크를 끝낼 수 있다.
export const WithAuth = (Component: any) => (props: any) => {
const router = useRouter();
useEffect(() => {
if (!localStorage.getItem("accessToken")) {
Modal.error({
content: "로그인 후 이용 가능합니다.",
onOk() {
router.push("/23-04-login-check");
},
});
}
}, []);
return <Component {...props} />;
};
const FETCH_USER_LOGGED_IN = gql`
query fetchUserLoggedIn {
fetchUserLoggedIn {
email
name
}
}
`;
function LoginSuccessPage() {
const { data } = useQuery(FETCH_USER_LOGGED_IN);
return <div>{data?.fetchUserLoggedIn.name}님 환영합니다.</div>;
}
export default WithAuth(LoginSuccessPage); // HOC
component
, 없으면 function
이다.with
를 앞에 붙인다.e.g. withAuth
, withApollo