diff --git a/packages/react-intersection-observer/src/InView.tsx b/packages/react-intersection-observer/src/InView.tsx index d130060a..ab159dc5 100644 --- a/packages/react-intersection-observer/src/InView.tsx +++ b/packages/react-intersection-observer/src/InView.tsx @@ -91,6 +91,7 @@ export class InView extends React.Component< prevProps.scrollMargin !== this.props.scrollMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || + prevProps.triggerOnce !== this.props.triggerOnce || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay diff --git a/packages/react-intersection-observer/src/__tests__/InView.test.tsx b/packages/react-intersection-observer/src/__tests__/InView.test.tsx index 213a51cf..18624b9b 100644 --- a/packages/react-intersection-observer/src/__tests__/InView.test.tsx +++ b/packages/react-intersection-observer/src/__tests__/InView.test.tsx @@ -144,6 +144,34 @@ test("Should unobserve when triggerOnce comes into view", () => { expect(instance.unobserve).toHaveBeenCalled(); }); +test("Should resume observing when triggerOnce is disabled", () => { + const callback = vi.fn(); + const { rerender } = render( + + Inner + , + ); + + mockAllIsIntersecting(true); + expect(callback).toHaveBeenLastCalledWith( + true, + expect.objectContaining({ isIntersecting: true }), + ); + + rerender( + + Inner + , + ); + callback.mockClear(); + mockAllIsIntersecting(false); + + expect(callback).toHaveBeenLastCalledWith( + false, + expect.objectContaining({ isIntersecting: false }), + ); +}); + test("Should unobserve when unmounted", () => { const { container, unmount } = render(Inner); const instance = intersectionMockInstance(container.children[0]);