From 58c7c2e9ac44bb61dcc3b3e8b4d34ff9dee6e044 Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Fri, 18 Mar 2022 02:16:15 +0100 Subject: [PATCH] fix dom loaded race condition --- packages/next/client/index.tsx | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/next/client/index.tsx b/packages/next/client/index.tsx index 9dd60546f861..cd2f3fc315b2 100644 --- a/packages/next/client/index.tsx +++ b/packages/next/client/index.tsx @@ -724,18 +724,20 @@ if (process.env.__NEXT_RSC) { } // When `DOMContentLoaded`, we can close all pending writers to finish hydration. - document.addEventListener( - 'DOMContentLoaded', - function () { - if (initialServerDataWriter && !initialServerDataFlushed) { - initialServerDataWriter.close() - initialServerDataFlushed = true - initialServerDataBuffer = undefined - } - initialServerDataLoaded = true - }, - false - ) + const DOMContentLoaded = function () { + if (initialServerDataWriter && !initialServerDataFlushed) { + initialServerDataWriter.close() + initialServerDataFlushed = true + initialServerDataBuffer = undefined + } + initialServerDataLoaded = true + } + // It's possible that the DOM is already loaded. + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', DOMContentLoaded, false) + } else { + DOMContentLoaded() + } const nextServerDataLoadingGlobal = ((self as any).__next_s = (self as any).__next_s || [])