fromis_9/frontend/src/hooks/useToast.js
caadiq 0b00055773 refactor: useToast 커스텀 훅으로 Toast 로직 통합
- hooks/useToast.js 생성 (44줄)
- 적용 파일 (9개):
  - AdminMembers.jsx
  - AdminMemberEdit.jsx
  - AdminAlbums.jsx
  - AdminAlbumForm.jsx
  - AdminAlbumPhotos.jsx
  - AdminSchedule.jsx
  - AdminScheduleForm.jsx
  - AdminScheduleBots.jsx
  - AdminScheduleCategory.jsx
- 각 파일에서 중복된 toast useState/useEffect 제거
- showSuccess/showError 편의 메서드 활용

총 약 70줄의 중복 코드 제거
2026-01-09 22:57:34 +09:00

56 lines
1.2 KiB
JavaScript

/**
* Toast 상태 관리 커스텀 훅
* 자동 숨김 타이머 및 상태 관리를 제공
*/
import { useState, useEffect, useCallback } from "react";
function useToast(duration = 3000) {
const [toast, setToast] = useState(null);
// Toast 자동 숨김
useEffect(() => {
if (toast) {
const timer = setTimeout(() => setToast(null), duration);
return () => clearTimeout(timer);
}
}, [toast, duration]);
// Toast 표시 함수
const showToast = useCallback((message, type = "info") => {
setToast({ message, type });
}, []);
// 편의 메서드
const showSuccess = useCallback(
(message) => showToast(message, "success"),
[showToast]
);
const showError = useCallback(
(message) => showToast(message, "error"),
[showToast]
);
const showWarning = useCallback(
(message) => showToast(message, "warning"),
[showToast]
);
const showInfo = useCallback(
(message) => showToast(message, "info"),
[showToast]
);
// Toast 숨김 함수
const hideToast = useCallback(() => setToast(null), []);
return {
toast,
setToast,
showToast,
showSuccess,
showError,
showWarning,
showInfo,
hideToast,
};
}
export default useToast;