apps/mantine.dev/src/pages/hooks/use-intersection.mdx
import { UseIntersectionDemos } from '@docs/demos'; import { Layout } from '@/layout'; import { MDX_DATA } from '@/mdx';
export default Layout(MDX_DATA.useIntersection);
The use-intersection hook returns information about the intersection
of a given element with its scroll container or body element using the Intersection Observer API:
The hook accepts IntersectionObserver's options as its only optional argument:
import { useIntersection } from '@mantine/hooks';
useIntersection({
root: document.querySelector('#some-element'),
rootMargin: '0rem',
threshold: 1.0,
});
The hook returns a ref function that should be passed to the observed element, and the latest entry, as returned by the IntersectionObserver's callback.
See the Intersection Observer API documentation to learn everything about the options.
On the first render (as well as during SSR), or when no element is being observed, the entry is null.
import { Paper } from '@mantine/core';
import { useIntersection } from '@mantine/hooks';
function Demo() {
const { ref } = useIntersection();
return (
<>
<div ref={ref} />
<Paper ref={ref} />
</>
);
}
interface UseIntersectionReturnValue<T> {
ref: React.RefCallback<T | null>;
entry: IntersectionObserverEntry | null;
}
function useIntersection<T extends HTMLElement = any>(
options?: IntersectionObserverInit,
): UseIntersectionReturnValue<T>
UseIntersectionReturnValue type is exported from @mantine/hooks package,
you can import it in your application:
import type { UseIntersectionReturnValue } from '@mantine/hooks';