Задать вопрос
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 и остается. Код простой как двери, не могу понять в чем дело.
  • Вопрос задан
  • 62 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae
Тлен
Классика: ты этот width наверняка присваиваешь какому-то элементу. Соответственно, ширина этого элемента становится ровна width. Когда ты меняешь ориентацию - ты не убираешь width перед этим, а значит innerWidth окна не минимальное значение, а то, какое получилось с учётом элемента с width, который это окно распирает.
Т.е. после каждого увеличения width, window.innerWidth не может быть меньше чем width.

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

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

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽