Skip to content

Commit be6d4a0

Browse files
committed
fix: sync index prop during render to prevent infinite loop (fix #395)
Replace useEffect-based prop sync with synchronous dispatch during render to eliminate the one-render lag that causes an infinite ping-pong loop when the index prop changes rapidly
1 parent a23cc7c commit be6d4a0

1 file changed

Lines changed: 7 additions & 2 deletions

File tree

src/contexts/LightboxState.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,14 @@ export function LightboxStateProvider({ slides, index, children }: LightboxState
7070
currentSlide: getSlideIfPresent(slides, index),
7171
});
7272

73-
React.useEffect(() => {
73+
const [prevSlides, setPrevSlides] = React.useState(slides);
74+
const [prevIndex, setPrevIndex] = React.useState(index);
75+
76+
if (slides !== prevSlides || index !== prevIndex) {
77+
setPrevSlides(slides);
78+
setPrevIndex(index);
7479
dispatch({ type: "update", slides, index });
75-
}, [slides, index]);
80+
}
7681

7782
const context = React.useMemo(() => ({ ...state, state, dispatch }), [state, dispatch]);
7883

0 commit comments

Comments
 (0)