[英]Lazy load components in react
我正在開發一個遺留的反應應用程序,因此很多部分無法推理而只能被接受。
所以,我有幾個組件加載了很多依賴項,顯然對於第一次渲染並不重要。 因此,我嘗試了以下方法:
const HeavyComp = lazy(() => import("HeavyComponent.jsx");
function Home() {
return <div>
<HeavyComp />
</div>
}
因此, HeavyComponent
作為主包的一部分加載,但僅在加載該組件后可見。 這有助於打破腳本時間,但 FCP 仍然很遙遠。
所以,我嘗試了以下方法:
function Home() {
const [ heavyComponent. setHeavyComponent ] = useState(null);
useEffect(() => {
setHeavyComponent(
lazy(() => import("HeavyComponent.jsx")
);
}, []);
return <div>
{
heavyComponent && <heavyComponent />
}
</div>
}
我認為這會有所幫助,但和以前一樣,FCP 仍然被延遲,直到下載、解析和渲染了heavyComponent
。 所以我唯一的選擇是使用setTimeout
或更好的requestIdleCallback
使其異步。
這是最好的解決方案還是有更好的解決方案?
假設使用 FCP,您指的是“第一個內容繪制”。 最好的選擇是使用Suspense
組件。 有了它,您可以添加一個后備加載器組件(在此示例中為<Spinner />
)。
import { Suspense, lazy } from 'react';
const HeavyComp = lazy(() => import("HeavyComponent.jsx");
function Home() {
return <div>
<Suspense fallback={<Spinner />}>
<HeavyComp />
</Suspense>
</div>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.