From 1b9317791dac79710f22706ec65c71b6a6642c28 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Thu, 10 Aug 2023 23:52:42 +0800 Subject: [PATCH] fix: detect redirect the dumb way --- src/utils/hooks/useFastRedirect.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/utils/hooks/useFastRedirect.ts b/src/utils/hooks/useFastRedirect.ts index a5c9a93..fa282d2 100644 --- a/src/utils/hooks/useFastRedirect.ts +++ b/src/utils/hooks/useFastRedirect.ts @@ -1,7 +1,7 @@ import { useConfigs } from 'containers/ConfigsContext' import { platform } from 'platforms' import * as React from 'react' -import { useEvent } from 'react-use' +import { useEvent, useInterval } from 'react-use' const config: import('pjax-api').Config = { areas: [ @@ -54,8 +54,17 @@ export const loadWithFastRedirect = (url: string, element: HTMLElement) => { } export function useAfterRedirect(callback: () => void) { - useEvent('pjax:end', callback, document) // legacy support - useEvent('turbo:render', callback, document) // prevent page content shift after first redirect to new page via turbo when sidebar is pinned + const latestHref = React.useRef(location.href) + const raceCallback = React.useCallback(() => { + const { href } = location + if (latestHref.current !== href) { + latestHref.current = href + callback() + } + }, [callback]) + useInterval(raceCallback, 500) + useEvent('pjax:end', raceCallback, document) // legacy support + useEvent('turbo:render', raceCallback, document) // prevent page content shift after first redirect to new page via turbo when sidebar is pinned } export function useRedirectedEvents(