Кастомный хук - это просто функция, которая начинается с префикса use и использует один или несколько хуков React. Например, мы можем создать кастомный хук, который будет возвращать текущую ширину экрана:
import { useEffect, useState } from "react"
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth)
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth)
window.addEventListener("resize", handleResize)
return () => window.removeEventListener("resize", handleResize)
}, [])
return width
}В этом примере мы создаем функцию useWindowWidth(), которая использует хуки useState() и useEffect() для отслеживания ширины окна браузера. Внутри функции мы определяем состояние width, которое будет содержать текущую ширину окна. Мы используем хук useEffect() для добавления слушателя события resize при монтировании компонента и удаления его при размонтировании. Когда ширина окна изменяется, мы вызываем функцию setWidth() для обновления состояния.
Когда мы используем кастомный хук в компоненте, мы вызываем его как обычную функцию и сохраняем результат в переменную:
function MyComponent() {
const width = useWindowWidth()
return <p>Window width: {width}</p>
}В этом примере мы используем кастомный хук useWindowWidth() в компоненте MyComponent и сохраняем результат в переменную width. Мы отображаем текущую ширину окна внутри элемента p.
Создание кастомных хуков позволяет нам упростить повторяющиеся задачи и легко переиспользовать код в разных компонентах. Кроме того, это помогает разделить логику компонентов и сделать код более читаемым и поддерживаемым.