refactor: use functional state updates in hero carousel callbacks

Switched goTo, goToPrev, and goToNext from depending on activeIndex
to using functional setState updates. Removed activeIndex from the
autoplay effect dependency array since the timer callback already
uses a functional update. Callbacks are now stable references.

Fixes #951
This commit is contained in:
Matt Van Horn 2026-03-27 01:08:43 -07:00
parent dfe3e7b43f
commit 298e658bab
No known key found for this signature in database

View file

@ -145,21 +145,26 @@ function HeroCarousel() {
const [isGifExpanded, setIsGifExpanded] = useState(false);
const directionRef = useRef<"forward" | "backward">("forward");
const goTo = useCallback(
(newIndex: number) => {
directionRef.current = newIndex >= activeIndex ? "forward" : "backward";
setActiveIndex(newIndex);
},
[activeIndex]
);
const goTo = useCallback((newIndex: number) => {
setActiveIndex((prev) => {
directionRef.current = newIndex >= prev ? "forward" : "backward";
return newIndex;
});
}, []);
const goToPrev = useCallback(() => {
goTo(activeIndex <= 0 ? carouselItems.length - 1 : activeIndex - 1);
}, [activeIndex, goTo]);
setActiveIndex((prev) => {
directionRef.current = "backward";
return prev <= 0 ? carouselItems.length - 1 : prev - 1;
});
}, []);
const goToNext = useCallback(() => {
goTo(activeIndex >= carouselItems.length - 1 ? 0 : activeIndex + 1);
}, [activeIndex, goTo]);
setActiveIndex((prev) => {
directionRef.current = "forward";
return prev >= carouselItems.length - 1 ? 0 : prev + 1;
});
}, []);
const item = carouselItems[activeIndex];
const isForward = directionRef.current === "forward";