Kentavr16
@Kentavr16
long cold winter

Почему некоректно обновляется ширина в кастомном хуке?

Есть элементарный кастомный хук

function useResize() {
  const [width, setWidth] = useState(window.innerWidth);

  useEffect(() => {
    const handleResize = () => {
      setWidth(window.innerWidth);
    };

    const handleOrientationChange = () => {
      setWidth(window.innerWidth);
    };

    window.addEventListener("resize", handleResize);
    window.addEventListener("orientationchange", handleOrientationChange);

    return () => {
      window.removeEventListener("resize", handleResize);
      window.removeEventListener("orientationchange", handleOrientationChange);
    };
  }, []);

  return width;
}

export default useResize;


Дебажу в Хроме. При повороте девайса в ландшафт ширина обновляется правильно, становится условно 700. При развороте обратно - ширина окна не обновляется, так 700 и остается. Код простой как двери, не могу понять в чем дело.
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae
Тлен
Классика: ты этот width наверняка присваиваешь какому-то элементу. Соответственно, ширина этого элемента становится ровна width. Когда ты меняешь ориентацию - ты не убираешь width перед этим, а значит innerWidth окна не минимальное значение, а то, какое получилось с учётом элемента с width, который это окно распирает.
Т.е. после каждого увеличения width, window.innerWidth не может быть меньше чем width.

Такие задачи принято решать вёрсткой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы