Skip to content

useMutationObserver

Handles the MutationObserver and tracks changes being made to the DOM tree.

Parameters

  1. the MutationObserver callback function.
  2. the MutationObserver options, as well as the ref object of the target element.

Return Values

NameTypeDescription
refRefObjectthe target element reference.
observerRefObjectthe MutationObserver object reference.

Example Usage

tsx
import { useMutationObserver, useSet } from 'react-pre-hooks';

export default function Items() {
  const items = useSet<number>();

  const { ref } = useMutationObserver(
    records => {
      records.forEach(record => {
        console.log(`the item ${record.addedNodes[0].textContent} is added.`);
      });
    },
    { childList: true }
  );

  const addItem = () => {
    items.add(Math.floor(Math.random() * 100));
  };

  return (
    <main>
      <div ref={ref}>
        {items.toArray((value, i) => (
          <span key={i}>{value}</span>
        ))}
      </div>
      <button onClick={addItem}>Add element</button>
    </main>
  );
}
import { useMutationObserver, useSet } from 'react-pre-hooks';

export default function Items() {
  const items = useSet<number>();

  const { ref } = useMutationObserver(
    records => {
      records.forEach(record => {
        console.log(`the item ${record.addedNodes[0].textContent} is added.`);
      });
    },
    { childList: true }
  );

  const addItem = () => {
    items.add(Math.floor(Math.random() * 100));
  };

  return (
    <main>
      <div ref={ref}>
        {items.toArray((value, i) => (
          <span key={i}>{value}</span>
        ))}
      </div>
      <button onClick={addItem}>Add element</button>
    </main>
  );
}

Released under the MIT License.