How to get the width of a react element

前端 未结 8 1226
灰色年华
灰色年华 2020-12-01 01:10

Im trying to create a range input that displays a tooltip right above the slider thumb.

I went through some vanilla JS examples online and it seems that I need to ha

8条回答
  •  没有蜡笔的小新
    2020-12-01 01:37

    Here is a TypeScript version of @meseern's answer that avoids unnecessary assignments on re-render:

    import React, { useState, useEffect } from 'react';
    
    export function useContainerDimensions(myRef: React.RefObject) {
      const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
    
      useEffect(() => {
        const getDimensions = () => ({
          width: (myRef && myRef.current.offsetWidth) || 0,
          height: (myRef && myRef.current.offsetHeight) || 0,
        });
    
        const handleResize = () => {
          setDimensions(getDimensions());
        };
    
        if (myRef.current) {
          setDimensions(getDimensions());
        }
    
        window.addEventListener('resize', handleResize);
    
        return () => {
          window.removeEventListener('resize', handleResize);
        };
      }, [myRef]);
    
      return dimensions;
    }
    

提交回复
热议问题