27 lines
1021 B
TypeScript
27 lines
1021 B
TypeScript
|
|
import { useState, useEffect } from "react";
|
|||
|
|
|
|||
|
|
export default function useWindowDimensions() {
|
|||
|
|
// На сервере инициализируем значениями по умолчанию (0 или null)
|
|||
|
|
const [dimensions, setDimensions] = useState({
|
|||
|
|
width: typeof window !== 'undefined' ? window.innerWidth : 0,
|
|||
|
|
height: typeof window !== 'undefined' ? window.innerHeight : 0,
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
// Этот код гарантированно выполнится ТОЛЬКО в браузере
|
|||
|
|
function handleResize() {
|
|||
|
|
setDimensions({
|
|||
|
|
width: window.innerWidth,
|
|||
|
|
height: window.innerHeight,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Устанавливаем точные размеры сразу при монтировании
|
|||
|
|
handleResize();
|
|||
|
|
|
|||
|
|
window.addEventListener('resize', handleResize);
|
|||
|
|
return () => window.removeEventListener('resize', handleResize);
|
|||
|
|
}, []);
|
|||
|
|
|
|||
|
|
return dimensions;
|
|||
|
|
}
|