Heim  >  Artikel  >  Web-Frontend  >  Benutzerdefinierter Reaktions-Hook: useResizeObserver

Benutzerdefinierter Reaktions-Hook: useResizeObserver

王林
王林Original
2024-08-02 10:03:11611Durchsuche

Custom React Hook: useResizeObserver

In diesem Beitrag teile ich einen benutzerdefinierten React-Hook namens useResizeObserver. Mit diesem Hook können Sie das umgrenzende Client-Rect eines DOM-Elements beobachten und abrufen und das Rect aktualisieren, wenn die Größe des Elements geändert wird. Es ist Teil meiner React-Bibliothek „react-helper-hooks“, die viele nützliche Hooks enthält, um Entwicklern Zeit zu sparen.

Quellcode

import { useEffect, useRef, useState } from 'react';

type ObserverRect = Omit<DOMRectReadOnly, 'toJSON'>;

export default function useResizeObserver(): Array<any> {
  const ref = useRef<any>(null);
  const [rect, setRect] = useState<ObserverRect>();

  useEffect(() => {
    const observer = new ResizeObserver(() => {
      if (ref.current) {
        const boundingRect = ref.current.getBoundingClientRect();
        setRect(boundingRect);
      }
    });
    observer.observe(ref.current);

    return () => observer.disconnect();
  }, [ref]);

  return [ref, rect];
}

Wie es funktioniert

Der useResizeObserver-Hook nutzt die ResizeObserver-API, um Größenänderungen eines DOM-Elements zu verfolgen. Es gibt eine Referenz zurück, die an das Zielelement und das aktuelle begrenzende Client-Rect dieses Elements angehängt werden soll.

Beispielverwendung

Hier ist ein Beispiel für die Verwendung des useResizeObserver-Hooks in einer Funktionskomponente:

import React from 'react';
import useResizeObserver from './useResizeObserver';

function ExampleComponent() {
  const [ref, rect] = useResizeObserver();

  return (
    <>
       <textarea ref={ref} style={{ resize: 'both', height: 100, width: 300 }}>
           Resize this element to see the changes:
       </textarea>

      {rect && (
        <div>
          <p>Top: {rect.top}</p>
          <p>Left: {rect.left}</p>
          <p>Width: {rect.width}</p>
          <p>Height: {rect.height}</p>
        </div>
      )}
    </>
  );
}

export default ExampleComponent;

In diesem Beispiel wird die Größe eines Textbereichselements geändert. Der useResizeObserver-Hook verfolgt seine Abmessungen, die außerhalb des Textbereichs angezeigt werden.

Über React-Helper-Hooks

Der useResizeObserver-Hook ist Teil meiner React-Bibliothek, React-Helper-Hooks. Diese Bibliothek enthält eine Sammlung benutzerdefinierter Hooks, die Entwicklern Zeit und Mühe sparen sollen. Hooks wie useResizeObserver bieten wiederverwendbare, effiziente Lösungen für häufige Aufgaben in React-Anwendungen.

Schauen Sie sich gerne in der Bibliothek um und tragen Sie bei oder schlagen Sie neue Hooks vor!


Lassen Sie mich wissen, wenn Sie Änderungen oder zusätzliche Informationen benötigen!


Folgen Sie mir auf X (Twitter) – https://twitter.com/punitsonime
Vernetzen wir uns über Linkedin – https://www.linkedin.com/in/punitsonime/

Das obige ist der detaillierte Inhalt vonBenutzerdefinierter Reaktions-Hook: useResizeObserver. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn