import { useCallback, useEffect, useState } from 'react'
const useHash = () => {
const [hash, setHash] = useState<string>('')
const hashChangeHandler = useCallback(() => {
setHash(window.location.hash)
}, [])
useEffect(() => {
setHash(window.location.hash)
}, [])
useEffect(() => {
window.addEventListener('hashchange', hashChangeHandler)
return () => {
window.removeEventListener('hashchange', hashChangeHandler)
}
}, [hashChangeHandler])
const updateHash = useCallback(
(newHash: string) => {
if (!newHash) {
history.pushState(null, document.title, location.pathname + location.search)
setHash('')
} else if (newHash !== hash) {
window.location.hash = newHash
}
},
[hash]
)
return [hash, updateHash] satisfies [string, (newHash: string) => void]
}
export default useHash