#javascript #reactjs
#javascript #reactjs
Вопрос:
Итак, у меня есть пользовательский хук, который будет отслеживать ограничительную рамку некоторых анимированных divs, но у него есть утечка памяти, когда я добавляю свою ограничительную рамку к useEffect
зависимостям, и я не могу понять, как заполнить пробел.
Смотрите Хук ниже, а также рабочий пример здесь, в codesandbox
import { useCallback, useEffect, useState } from 'react';
const useBoundingBoxWithEventListeners = (ref) => {
const [bbox, setBbox] = useState({});
const set = useCallback(() =>
setBbox(ref amp;amp; ref.current ? ref.current.getBoundingClientRect() : {}), [ref]);
useEffect(() => {
set();
window.addEventListener('resize', set);
return () => {
window.removeEventListener('resize', set);
};
}, [ref, set, bbox]);
return { bbox, ref };
};
export { useBoundingBoxWithEventListeners };
Комментарии:
1. Зачем вам нужен
bbox
массив зависимостей? Похоже, это привело бы к бесконечному циклу. Работает ли это без него? Иref
если уж на то пошло?2. если вы посмотрите пример codesandbox, вы увидите разницу при использовании или нет. Без этого svg, которые рисуются между разделениями, не будут отслеживать ссылки и отображаться должным образом. Что касается использования bbox в массиве dep, он не обязательно должен быть там, если есть другой способ заставить его работать