Как получить измерение из компонента импорта SVG — NextJS

#javascript #reactjs #svg #next.js

#javascript #reactjs #svg #next.js

Вопрос:

Я импортирую файл SVG в качестве компонента и пытаюсь получить его измерение, но он возвращает null. Может кто-нибудь дать мне совет для достижения этой цели.

PS. getBBox() не работает, выдает ошибку.

Пример кода:

 import IconSVG from 'public/images/my-svg.svg';
  
const MyComponent = () => {
  const myRef = React.useRef(null);

  React.useEffect(() => {
    console.log(myRef.current);
  }, []);

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

Комментарии:

1. В зависимости от формата вашего svg вы можете получить viewBox атрибут, иногда svg width height также имеет атрибуты and .

Ответ №1:

Вместо этого вы должны использовать useCallback() :

 const MyComponent = () => {
  const myRef = React.useCallback(node => {
    if (node !== null) {
      console.log(node.current.getBoundingClientRect()); // get dimensions
    }
  }, []);

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

Комментарии:

1. Спасибо! До сих пор я не знал об обратных вызовах ref

2. Рад, что это помогло.