Напишите эффект в parent, который запускается при первоначальном монтировании.Этот эффект будет запущен после инициализации ссылки и отображения дочернего элемента.После этого сохраните в родительском состоянии состояние, которое представляет собой маржу, которую необходимо рассчитать, и после расчета маржи обновите состояние
const Parent = () => {
const childRef = useRef(null);
const [margin, updateMargin] = useState(0);
useEffect(() => {
// calculate margin. Let call it margin
updateMargin(margin);
}, []);
return (
<Child saveRef={ref} />
);
const Child = ({saveRef}) => (<div ref={saveRef}> </div>);
РЕДАКТИРОВАТЬ: Чтобы обновить размер окна,вам нужно добавить прослушиватель событий при изменении размера окна и пересчитать высоту
const Parent = () => {
const childRef = useRef(null);
const [margin, updateMargin] = useState(0);
useEffect(() => {
window.addEventListener('resize', handleResize);
() => {
window.removeEventListener('resize', handleResize);
}
}, []);
const handleResize = () => {
// use ref, calcualte margin and update
}
return (
<Child saveRef={ref} />
);