UNPKG

@metapages/hash-query

Version:

Get/set URL parameters in the hash string instead of the query string.

48 lines (42 loc) 1.27 kB
import { useCallback, useEffect, useState } from "react"; import { getHashParamFromWindow, getHashParamsFromWindow, setHashParamInWindow, SetHashParamOpts, } from "../core"; /** * Hook for getting/setting hash params */ export const useHashParam = ( key: string, defaultValue?: string ): [ string | undefined, (v: string | undefined, opts?: SetHashParamOpts) => void ] => { const [hashParam, setHashParamInternal] = useState<string | undefined>( getHashParamFromWindow(key) ?? defaultValue ); useEffect(() => { const [_, hashParams] = getHashParamsFromWindow(); if (defaultValue && hashParams[key] === undefined) { setHashParamInWindow(key, defaultValue); } }, [defaultValue]); useEffect(() => { const onHashChange = (_: HashChangeEvent) => { const paramHash = getHashParamsFromWindow()[1]; setHashParamInternal(paramHash[key]); }; window.addEventListener("hashchange", onHashChange); return () => window.removeEventListener("hashchange", onHashChange); }, []); const setParam: (v: string | undefined) => void = useCallback( (value: string | undefined, opts?: SetHashParamOpts) => { setHashParamInWindow(key, value, opts); }, [] ); return [hashParam, setParam]; };