В этой серии статей мы отправимся в путешествие по миру пользовательских хуков React, открывая для себя их огромный потенциал для улучшения ваших проектов разработки. Сегодня мы сосредоточимся на хуке «useMediaQuery», одном из многих тщательно разработанных хуков, доступных в коллекции пользовательских хуков React.

Github: https://github.com/sergeyleschev/react-custom-hooks

import { useState, useEffect } from "react"
import useEventListener from "../useEventListener/useEventListener"

export default function useMediaQuery(mediaQuery) {
    const [isMatch, setIsMatch] = useState(false)
    const [mediaQueryList, setMediaQueryList] = useState(null)
    useEffect(() => {
        const list = window.matchMedia(mediaQuery)
        setMediaQueryList(list)
        setIsMatch(list.matches)
    }, [mediaQuery])
    useEventListener("change", e => setIsMatch(e.matches), mediaQueryList)
    return isMatch
}

Хук useMediaQuery позволяет динамически обновлять пользовательский интерфейс на основе заданного медиа-запроса. Просто введите нужный медиа-запрос в качестве параметра, и хук вернет логическое значение, указывающее, соответствует ли медиа-запрос текущему размеру окна просмотра.

Одним из ключевых преимуществ этого пользовательского хука является его простота и возможность повторного использования. Всего с помощью нескольких строк кода вы можете без особых усилий реализовать адаптивное поведение во всем вашем приложении. Независимо от того, требуется ли вам условный рендеринг компонентов, применение определенных стилей или запуск различных функций в зависимости от размера экрана, useMediaQuery поможет вам в этом.

import useMediaQuery from "./useMediaQuery"

export default function MediaQueryComponent() {
    const isLarge = useMediaQuery("(min-width: 200px)")
    return <div>Large: {isLarge.toString()}</div>
}

Этот механизм не ограничен конкретными вариантами использования; его можно использовать в самых разных сценариях. Например, вы можете использовать его для динамической настройки макета навигационного меню, скрытия или отображения определенных элементов в зависимости от размера экрана или даже для оптимизации загрузки данных в зависимости от доступного пространства. Возможности безграничны, а хук useMediaQuery позволяет обеспечить бесперебойную работу пользователей на различных устройствах и с экранами разного размера.

Полная версия | Пользовательские хуки React: https://habr.com/en/articles/746760/

Комментарии (3)


  1. winkyBrain
    07.08.2025 12:31

    Ого, вы действительно решили спамить как бот кусочками иноязычного поста с хабра, просто переводя текст, даже не удосуживая ответами на комментарии - а что отвечать-то, материал не ваш. Боюсь, это провальная затея


    1. IT-VAVILON Автор
      07.08.2025 12:31

      А что плохого в переводе статей про нормальные хуки?


      1. winkyBrain
        07.08.2025 12:31

        не статей, а статьи, в единственном числе. из которых вы уже клепаете статьи во множественном числе, чтобы просто набить количество материала у себя в профиле. то есть польза тут только для вас, иначе это был был один красивый пост) что же касается нормальности хуков - вам в других ваших микростатьях-переводах на эту тему уже ответили