mirror of
https://github.com/streamich/react-use.git
synced 2026-01-18 14:06:52 +00:00
More DRY code. Also move non-hooks to separate directories. BREAKING CHANGE: all `create*` factories been moved to `factory` subdirectory and in case direct import should be imported like `react-use/esm/factory/createBreakpoint` BREAKING CHANGE: `comps` directory renamed to `component`
35 lines
734 B
TypeScript
35 lines
734 B
TypeScript
import { useCallback, useState } from 'react';
|
|
import useLifecycles from './useLifecycles';
|
|
import { off, on } from './misc/util';
|
|
|
|
/**
|
|
* 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(
|
|
() => {
|
|
on(window, 'hashchange', onHashChange);
|
|
},
|
|
() => {
|
|
off(window, 'hashchange', onHashChange);
|
|
}
|
|
);
|
|
|
|
const _setHash = useCallback(
|
|
(newHash: string) => {
|
|
if (newHash !== hash) {
|
|
window.location.hash = newHash;
|
|
}
|
|
},
|
|
[hash]
|
|
);
|
|
|
|
return [hash, _setHash] as const;
|
|
};
|