Кастомный хук - это просто функция, которая начинается с префикса 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
.
Создание кастомных хуков позволяет нам упростить повторяющиеся задачи и легко переиспользовать код в разных компонентах. Кроме того, это помогает разделить логику компонентов и сделать код более читаемым и поддерживаемым.