MutationObserver

What is the mutation observer?

MutationObserver is a JavaScript API that allows developers to listen for changes to specific elements or nodes in the DOM (Document Object Model). It provides a way to observe and respond to changes that occur…


This content originally appeared on DEV Community and was authored by Hasan TEZCAN

What is the mutation observer?

MutationObserver is a JavaScript API that allows developers to listen for changes to specific elements or nodes in the DOM (Document Object Model). It provides a way to observe and respond to changes that occur within the DOM structure.

The MutationObserver works by registering a callback function to observe a specific target element or node in the DOM. When a change occurs, such as a node being added or removed, the callback function is called with a list of MutationRecord objects that describe the changes that have occurred.

The MutationObserver API provides a powerful tool for building responsive web applications that need to react to changes in the DOM. It can be used to implement a wide range of features, such as lazy-loading content, auto-updating UI elements, and real-time data synchronization.

Let me explain mutation observer through an example.

Our aim is to add an animation when the category's section height changes. We need to listen that operation

before after
before after

In order to do this we need a reference of the category section.

import React, { useRef } from 'react';
import { CategoryItems } from './category-items/category-items';
import { CategoryTitles } from './category-titles/category-titles';
import './categories.scss';

const Categories = () => {
  const categoriesRef = useRef<HTMLDivElement>(null);

  return (
    <div className="categories" ref={categoriesRef}>
      <CategoryTitles />
      <CategoryItems />
    </div>
  );
};

export { Categories };

After preparing the categoriesRef, we can create the mutationObserver structure.

First of all, we need to create mutationObserver

  const mutationObserver = new MutationObserver(async () => {
    console.log('mutationObserver operation');
  });

This is our mutationObserver instance we will call this instance from useEffect

  useEffect(() => {
    if (categoriesRef.current) {
      mutationObserver.observe(categoriesRef.current, {
        childList: true,
        subtree: true,
      });

      return () => {
        mutationObserver.disconnect();
      };
    }
  }, []);
  • We defined mutationObserver.observe with categoriesRef.current which listens to the parameters such as childList and subtree, also you can check this out for more parameters.

  • And also we define the mutationObserver.disconnect() on componentWillUnmount hook for delete listen operation when component closed.

Henceforward when the height change at categoriesRef we will see the console log.

    console.log('mutationObserver operation');

Then we will add the animation handler code piece and define a CSS transition to categoriesRef

  const mutationObserver = new MutationObserver(async () => {
    const categoryTitles = document.getElementById('categoryTitles') as HTMLDivElement | null;
    const categoryItems = document.getElementById('categoryItems') as HTMLDivElement | null;

    if (categoriesRef.current && categoryTitles && categoryItems) {
      if (categoryTitles.clientHeight > categoryItems.clientHeight) {
        categoriesRef.current.style.height = `${categoryTitles.clientHeight}px`;
      } else {
        categoriesRef.current.style.height = `${categoryItems.clientHeight}px`;
      }
    }
  });
.categories {
  transition: height 200ms ease;
}

after

voilà 🎉

Source


This content originally appeared on DEV Community and was authored by Hasan TEZCAN


Print Share Comment Cite Upload Translate Updates
APA

Hasan TEZCAN | Sciencx (2023-03-23T08:54:50+00:00) MutationObserver. Retrieved from https://www.scien.cx/2023/03/23/mutationobserver/

MLA
" » MutationObserver." Hasan TEZCAN | Sciencx - Thursday March 23, 2023, https://www.scien.cx/2023/03/23/mutationobserver/
HARVARD
Hasan TEZCAN | Sciencx Thursday March 23, 2023 » MutationObserver., viewed ,<https://www.scien.cx/2023/03/23/mutationobserver/>
VANCOUVER
Hasan TEZCAN | Sciencx - » MutationObserver. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2023/03/23/mutationobserver/
CHICAGO
" » MutationObserver." Hasan TEZCAN | Sciencx - Accessed . https://www.scien.cx/2023/03/23/mutationobserver/
IEEE
" » MutationObserver." Hasan TEZCAN | Sciencx [Online]. Available: https://www.scien.cx/2023/03/23/mutationobserver/. [Accessed: ]
rf:citation
» MutationObserver | Hasan TEZCAN | Sciencx | https://www.scien.cx/2023/03/23/mutationobserver/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.