React.useEffect(()=>{
document.addEventListener('onmousedown', handleClick)
return()=> document.removeEventListener('onmousedown', handleClick)
}, [])
Объяснение:
React.useEffect(()=>{
//вешаем листенер
document.addEventListener('onmousedown', handleClick)
// в зависимости хука заносим пустой массив. Таким образом мы с помощью хука выполним метод
//componentDidMount(), вызвав useEffect 1 раз
}, [])
React.useEffect(()=>{
...какой-то код...
//удаляем листенер
return ()=> document.removeEventListener('onmousedown', handleClick)
//после return прописываем методы, которые нужно выполнить после при размонтировании компонента
//componentWillUnmount() аналог на хуках
}, [])
про useRef очень доступно и удобно написано в документации. Принцип такой же, как в вашем примере, только обращение к свойствам немножко иначе (refName.current...)