From e184a58664ecd2f7b9a39412e3a8280642e53e37 Mon Sep 17 00:00:00 2001 From: Jay Sheen Date: Fri, 14 Nov 2025 18:24:17 +0900 Subject: [PATCH] =?UTF-8?q?React=20Hooks=20=EA=B7=9C=EC=B9=99=20=EC=9C=84?= =?UTF-8?q?=EB=B0=98=20=EC=88=98=EC=A0=95=20-=20useSetOnRightClick?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 문제: - useSetOnRightClick 훅이 useEffect 안에서 호출되어 에러 발생 - "Invalid hook call" 에러 발생 수정 사항: - useSetOnRightClick을 컴포넌트 최상위 레벨로 이동 - 조건부로 함수 또는 undefined를 전달하도록 변경 - useSetOnRightClick 훅의 의존성 배열에 fn 추가 - fn이 undefined일 때도 올바르게 처리하도록 개선 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/pages/account/user/login-auth-info-page.tsx | 7 ++----- src/widgets/sub-layout/use-sub-layout.ts | 8 ++++++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/pages/account/user/login-auth-info-page.tsx b/src/pages/account/user/login-auth-info-page.tsx index f058d9d..510cb9b 100644 --- a/src/pages/account/user/login-auth-info-page.tsx +++ b/src/pages/account/user/login-auth-info-page.tsx @@ -54,11 +54,8 @@ export const UserLoginAuthInfoPage = () => { }); // 현재 로그인한 사용자가 아닌 경우에만 삭제 버튼 표시 - useEffect(() => { - if (usrid && currentUsrid && usrid !== currentUsrid) { - useSetOnRightClick(() => handleDeleteUser); - } - }, [usrid, currentUsrid]); + const isDeleteAllowed = usrid && currentUsrid && usrid !== currentUsrid; + useSetOnRightClick(isDeleteAllowed ? handleDeleteUser : undefined); return ( <> diff --git a/src/widgets/sub-layout/use-sub-layout.ts b/src/widgets/sub-layout/use-sub-layout.ts index eeb0b0e..8558e19 100644 --- a/src/widgets/sub-layout/use-sub-layout.ts +++ b/src/widgets/sub-layout/use-sub-layout.ts @@ -22,11 +22,15 @@ export const useSetOnBack = (fn: any) => { export const useSetOnRightClick = (fn: any) => { const { setOnRightClick } = useSubLayoutContext(); useEffect(() => { - setOnRightClick(() => fn); + if (fn) { + setOnRightClick(() => fn); + } else { + setOnRightClick(() => undefined); + } return () => { setOnRightClick(() => undefined); }; - }, [setOnRightClick]); + }, [fn, setOnRightClick]); return { setOnRightClick }; };