onClick?.(schedule)}
className="relative overflow-hidden bg-gradient-to-r from-pink-400 via-purple-400 to-indigo-400 rounded-2xl shadow-lg hover:shadow-xl transition-shadow cursor-pointer"
>
{/* 배경 장식 */}
diff --git a/frontend/src/components/pc/public/schedule/ScheduleCard.jsx b/frontend/src/components/pc/public/schedule/ScheduleCard.jsx
index e03d79a..e7e2697 100644
--- a/frontend/src/components/pc/public/schedule/ScheduleCard.jsx
+++ b/frontend/src/components/pc/public/schedule/ScheduleCard.jsx
@@ -26,7 +26,7 @@ const ScheduleCard = memo(function ScheduleCard({ schedule, onClick, className =
return (
onClick?.(schedule)}
className={`flex items-stretch bg-white rounded-2xl shadow-sm hover:shadow-md transition-shadow overflow-hidden cursor-pointer ${className}`}
>
{/* 날짜 영역 */}
diff --git a/frontend/src/components/pc/public/schedule/UndatedScheduleCard.jsx b/frontend/src/components/pc/public/schedule/UndatedScheduleCard.jsx
index 4fb833a..186a052 100644
--- a/frontend/src/components/pc/public/schedule/UndatedScheduleCard.jsx
+++ b/frontend/src/components/pc/public/schedule/UndatedScheduleCard.jsx
@@ -17,7 +17,7 @@ const UndatedScheduleCard = memo(function UndatedScheduleCard({ schedule, onClic
return (
onClick?.(schedule)}
className={`flex items-stretch bg-white rounded-2xl border-2 border-dashed border-gray-300 hover:border-gray-400 transition-colors overflow-hidden cursor-pointer ${className}`}
>
{/* 월 영역 (연한 카테고리 색) */}
diff --git a/frontend/src/pages/mobile/schedule/Schedule.jsx b/frontend/src/pages/mobile/schedule/Schedule.jsx
index de5d203..90e78af 100644
--- a/frontend/src/pages/mobile/schedule/Schedule.jsx
+++ b/frontend/src/pages/mobile/schedule/Schedule.jsx
@@ -1,4 +1,4 @@
-import { useState, useEffect, useMemo, useRef } from 'react';
+import { useState, useEffect, useMemo, useRef, useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import { motion, AnimatePresence } from 'framer-motion';
import { ChevronLeft, ChevronRight, ChevronDown, Search, X, Calendar } from 'lucide-react';
@@ -44,6 +44,11 @@ function MobileSchedule() {
);
const setSelectedDate = (date) => setStoredSelectedDate(date);
+ // 카드 클릭 핸들러 (안정적 참조로 카드 React.memo 유지)
+ const handleCardClick = useCallback((schedule) => {
+ navigate(`/schedule/${schedule.id}`);
+ }, [navigate]);
+
const [isSearchMode, setIsSearchMode] = useState(false);
const [searchInput, setSearchInput] = useState('');
const [searchTerm, setSearchTerm] = useState('');
@@ -888,7 +893,7 @@ function MobileSchedule() {
key={schedule.id}
schedule={schedule}
delay={index * 0.05}
- onClick={() => navigate(`/schedule/${schedule.id}`)}
+ onClick={handleCardClick}
/>
);
}
@@ -908,7 +913,7 @@ function MobileSchedule() {
key={schedule.id}
schedule={schedule}
delay={index * 0.05}
- onClick={() => navigate(`/schedule/${schedule.id}`)}
+ onClick={handleCardClick}
/>
);
})}
@@ -926,7 +931,7 @@ function MobileSchedule() {
key={`undated-${schedule.id}`}
schedule={schedule}
delay={(selectedDateSchedules.length + index) * 0.05}
- onClick={() => navigate(`/schedule/${schedule.id}`)}
+ onClick={handleCardClick}
/>
))}
diff --git a/frontend/src/pages/pc/public/schedule/Schedule.jsx b/frontend/src/pages/pc/public/schedule/Schedule.jsx
index ae96c69..39af418 100644
--- a/frontend/src/pages/pc/public/schedule/Schedule.jsx
+++ b/frontend/src/pages/pc/public/schedule/Schedule.jsx
@@ -292,7 +292,7 @@ function PCSchedule() {
});
// 일정 클릭 핸들러
- const handleScheduleClick = (schedule) => {
+ const handleScheduleClick = useCallback((schedule) => {
// 생일, 데뷔, 주년 등 특수 일정
if (schedule.is_birthday || schedule.is_debut || schedule.is_anniversary) {
navigate(`/schedule/${schedule.id}`);
@@ -309,7 +309,7 @@ function PCSchedule() {
} else {
navigate(`/schedule/${schedule.id}`);
}
- };
+ }, [navigate]);
// 카테고리 토글
const toggleCategory = (categoryId) => {
@@ -586,11 +586,11 @@ function PCSchedule() {
>
{schedule.is_birthday ? (
- handleScheduleClick(schedule)} />
+
) : schedule.is_debut || schedule.is_anniversary ? (
) : (
- handleScheduleClick(schedule)} />
+
)}
@@ -618,11 +618,11 @@ function PCSchedule() {
transition={{ delay: Math.min(index, 10) * 0.03 }}
>
{schedule.is_birthday ? (
-