Skip to content

Commit ea2b866

Browse files
committed
only initiate hydration after all subresources loaded
1 parent 8a977b3 commit ea2b866

File tree

1 file changed

+9
-14
lines changed

1 file changed

+9
-14
lines changed

packages/react-on-rails/src/pageLifecycle.ts

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,14 @@ function setupPageNavigationListeners(): void {
5858
}
5959
}
6060

61-
let isPageLifecycleInitialized = false;
62-
function initializePageEventListeners(): void {
63-
if (typeof window === 'undefined') return;
64-
65-
if (isPageLifecycleInitialized) {
66-
return;
67-
}
68-
isPageLifecycleInitialized = true;
69-
70-
if (document.readyState !== 'loading') {
71-
setupPageNavigationListeners();
61+
function onPageReady(callback: () => void) {
62+
if (document.readyState === 'complete') {
63+
callback();
7264
} else {
73-
document.addEventListener('DOMContentLoaded', setupPageNavigationListeners);
65+
document.addEventListener('readystatechange', function onReadyStateChange() {
66+
onPageReady(callback);
67+
document.removeEventListener('readystatechange', onReadyStateChange);
68+
});
7469
}
7570
}
7671

@@ -79,13 +74,13 @@ export function onPageLoaded(callback: PageLifecycleCallback): void {
7974
void callback();
8075
}
8176
pageLoadedCallbacks.add(callback);
82-
initializePageEventListeners();
77+
onPageReady(setupPageNavigationListeners);
8378
}
8479

8580
export function onPageUnloaded(callback: PageLifecycleCallback): void {
8681
if (currentPageState === 'unload') {
8782
void callback();
8883
}
8984
pageUnloadedCallbacks.add(callback);
90-
initializePageEventListeners();
85+
onPageReady(setupPageNavigationListeners);
9186
}

0 commit comments

Comments
 (0)