Back to Mantine

Use Intersection

apps/mantine.dev/src/pages/hooks/use-intersection.mdx

9.1.11.9 KB
Original Source

import { UseIntersectionDemos } from '@docs/demos'; import { Layout } from '@/layout'; import { MDX_DATA } from '@/mdx';

export default Layout(MDX_DATA.useIntersection);

Usage

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:

<Demo data={UseIntersectionDemos.usage} />

API

The hook accepts IntersectionObserver's options as its only optional argument:

tsx
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.

tsx
import { Paper } from '@mantine/core';
import { useIntersection } from '@mantine/hooks';

function Demo() {
  const { ref } = useIntersection();

  return (
    <>
      <div ref={ref} />
      <Paper ref={ref} />
    </>
  );
}

Definition

tsx
interface UseIntersectionReturnValue<T> {
  ref: React.RefCallback<T | null>;
  entry: IntersectionObserverEntry | null;
}

function useIntersection<T extends HTMLElement = any>(
  options?: IntersectionObserverInit,
): UseIntersectionReturnValue<T>

Exported types

UseIntersectionReturnValue type is exported from @mantine/hooks package, you can import it in your application:

tsx
import type { UseIntersectionReturnValue } from '@mantine/hooks';