react-use/src/useHash.ts
2020-04-08 09:21:06 +03:00

27 lines
670 B
TypeScript

import { useState, useCallback } from "react"
import useLifecycles from "./useLifecycles"
/**
* read and write url hash, response to url hash change
*/
export const useHash = () => {
const [hash, setHash] = useState(() => window.location.hash)
const onHashChange = useCallback(() => {
setHash(window.location.hash)
}, [])
useLifecycles(() => {
window.addEventListener('hashchange', onHashChange)
}, () => {
window.removeEventListener('hashchange', onHashChange)
})
const _setHash = useCallback((newHash: string) => {
if (newHash !== hash) {
window.location.hash = newHash
}
}, [hash])
return [hash, _setHash] as const
}