import {useLocation} from "react-router"; import {useEffect, useState} from "react"; import querystring from "query-string"; export const getFirst = (item: string | null | Array)=>{ if (!item){ return '' } if (Array.isArray(item)){ return item.length ? item[0] ? item[0]: '' : '' } return item || '' } type ParseQueryType = { url: string query?: any route?: string fragmentIdentifier?: string } export function parseQuery(): ParseQueryType{ const fullUrl= window.location.href; const query = querystring.parseUrl(fullUrl, { parseFragmentIdentifier: true }) as ParseQueryType; if (query.fragmentIdentifier){ const subQuery = querystring.parseUrl(query.fragmentIdentifier); Object.assign(query.query, subQuery.query); query.route = subQuery.url; } console.log('parseQuery', query) return query as { query: T, url: string } } /** * 解析route的参数 */ export function useQuery (){ const [query,setQuery] = useState() const location = useLocation() const parseRouteQuery = ()=>{ if (!location.search){ return } const q = querystring.parse(location.search); setQuery(q as never) } useEffect(()=>{ parseRouteQuery() },[location]) useEffect(()=>{ parseRouteQuery() },[]) return query } export const cacheTo = (to='/')=>{ localStorage.setItem('redirect_to', to) } export const getLastTo = (remove=false)=>{ const to = localStorage.getItem(`redirect_to`); remove && localStorage.removeItem('redirect_to'); return to ?? '/' }