From 5b852976655e2acbedee17a6a0af4ac3b5235eca Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Sun, 15 Aug 2021 11:50:59 +0800 Subject: [PATCH] simplify loadable component --- packages/next/shared/lib/loadable.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/next/shared/lib/loadable.js b/packages/next/shared/lib/loadable.js index fbeaf9480f6f4..b1d8032c5cc9c 100644 --- a/packages/next/shared/lib/loadable.js +++ b/packages/next/shared/lib/loadable.js @@ -71,8 +71,14 @@ function createLoadableComponent(loadFn, options) { options ) + let lazyComponent if (opts.suspense) { - opts.lazy = React.lazy(opts.loader) + lazyComponent = React.lazy(opts.loader) + return React.forwardRef(LazyImpl) + } + + function LazyImpl(props, ref) { + return React.createElement(lazyComponent, { ...props, ref }) } let subscription = null @@ -90,7 +96,7 @@ function createLoadableComponent(loadFn, options) { } // Server only - if (typeof window === 'undefined' && !opts.suspense) { + if (typeof window === 'undefined') { ALL_INITIALIZERS.push(init) } @@ -99,8 +105,7 @@ function createLoadableComponent(loadFn, options) { !initialized && typeof window !== 'undefined' && typeof opts.webpack === 'function' && - typeof require.resolveWeak === 'function' && - !opts.suspense + typeof require.resolveWeak === 'function' ) { const moduleIds = opts.webpack() READY_INITIALIZERS.push((ids) => { @@ -148,12 +153,8 @@ function createLoadableComponent(loadFn, options) { }, [props, state]) } - function LazyImpl(props, ref) { - return React.createElement(opts.lazy, { ...props, ref }) - } - - const LoadableComponent = opts.suspense ? LazyImpl : LoadableImpl - LoadableComponent.preload = () => !opts.suspense && init() + const LoadableComponent = LoadableImpl + LoadableComponent.preload = () => init() LoadableComponent.displayName = 'LoadableComponent' return React.forwardRef(LoadableComponent)